[Soc2014] Official meta API

Hi @carljm the reason I am using an OrderedSet is to preserve ordering between recursive calls. If a child model has a field overriding the parent, we replace it's ordering.
With regards to an internal function: that can be a solution definitely. It would look less compact, but we can see what it looks like.