Soc2014 meta refactor upgrade

# Main API
get_fields(types, opts) -> (field, field, ...)
get_field(field_name, include_related=False) -> field

# Cached properties for fast access
fields -> (field, field, ..)
concrete_fields -> (field, field, ...)
local_concrete_fields -> (field, field, ...)
field_map -> { field_name : field, field_name: field, .... }
concrete_field_map -> { field_name : field, field_name: field, .... }
I don't think we should force users to trim "internal-only" fields as the comment in `get_all_field_names()` says:
```
# Internal-only names end with "+" (symmetrical m2m related names being
# the main example). Trim them.
```
I have used the method in projects myself.