Changed every hierarchical data type to have its own context class so we can limit certain DSL keywords to certain levels. For example we don't want root to support node directly.