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, .... }
@timgraham @freakboy3742 I think we should take some decisions on the opts and fields bits:
1) Bits can potentially cause circular dependencies, should we move them to a separate file? and if yes, what shall we call the file?
2) Importing bits is quite a nuisance, is there any way we could avoid this all-together? I tried with flags and that was a messy decision: there were 8 flags in total. I am happy to re-think the whole API if necessary.