Data refactor

This huge pull request represents all of the work that I have been doing around switching to a data-driven model