(PUP-2860) Separate models into meta and impl
This separates the three models for the language, types and
bindings into separate files for the meta part and the implementation.
This is done in anticipation of future changes / alternative ways of
generating the logic and working with models.
Now, when the runtime model is wanted, it loads the meta part and
then mixes in the implementation.
This also separates the dependencies between the models; now the
PopsObject from the language model is not reused in the other models.