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 would actually like to know when the many_to_many bit was actually needed. get_fields only takes into consideration data an M2M fields, and a model with such cannot have 2 concrete fields with the same name.. (or am I wrong?)