Currently we use superstruct for config validation. This isn't really necessary and in most instances the validation is very loose. It also doesn't give us support for deep merge of default values, so default values may not get passed to the given module unless they are all explicitly defined.
Rather than restricting validation of the config, we should focus on providing defaults that are sane,
We have already implemented custom marshal/unmarshal methods for the SignedOrder and OrderEvent types but in both cases they were mostly needed because *big.Int doesn't marshal properly into JSON. To avoid more custom marshallers, we should create a custom big.Int type that does.