change ConfigCodable + support ConfigValue fields

- fields that are assignable from ConfigValues (so pretty much
just ConfigValues) are assigned the raw ConfigValue found during
construction
- ConfigCodable reworked + added ValueCodable; they now have clearly
defined, highly flexible, behavior, but i'm not entirely sure what
their use case is. The one I tried to use ConfigCodable for in the
previous version is better solved by just using a ConfigValue field.
- minor clean ups