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.