refactor and slightly change field codability

- setting codable to false (in FieldConfig) will now be respected
for public, non-final fields. FieldConfig has and continues to
default codable to true so uses of FieldConfig without any
codable parameter will continue to work as normal.
- setAccessible(true) is called even when the field is not
annotated with FieldConfig. This prevents weird corner cases where
a public field in a non-public class could cause illegal access
errors.