Revise builder. Accept builder components in builder methods instead of the builder factory method. Enforce valid parameters instead of lenient, potentially null parameters. Introduce configuration means to control default typing. Extend tests. See #2878 Original pull request: #2905