Commit work so far on dependency ordering based Level 1 -> Level 2 processor.

This code has the difficulty that it won't handle mutually referencing namespaces correctly, e.g.:
  namespace a where
    domain D1 = clone b.D2
    val v1 :: (Real -> Boolean)
    ...
  namespace b where
    domain D2 = subset Real using v1
Here, the program will see a depends on b, and b depends on a, and fail, which we don't want.
I plan to change the code after this to do two passes over the entire model, creating
identifiers for everything in the first pass, and setting up the contents in the second
pass.