re-organize and document some of codec config

- throw more helpful exceptions in some error cases
- much easier to follow some important parts related to syntax
sugar
- some new top-level convenience methods
- edge case involving _default sugar on concrete types changed so
that _default is only used for uninstantiable types. unlikely to
come up, and this way is much more consistent, but could possibly
have some unforseen side effect. _default is a really recent
feature though so not concerned