This required a bit of a rework of how the options are validated. Now they're only validated once when `Builder.build` is called instead of inside each builder.
This makes the design a little easier to understand and change.
Also implements building of many params/records as a side-effect.
Reviewed-on: https://code.harton.nz/james/smokestack/pulls/6
Co-authored-by: James Harton <james@harton.nz>
Co-committed-by: James Harton <james@harton.nz>