Initial upgrade of 2.0.0 and new DSL methods

This is a fairly large refactor and is the result of hundreds of tiny little squashed commits that don't make much sense outside of the context of this big commit.