Migrate to blueprint architecture to allow better flow and clarity to codebase, this is done as part of #40. Also a prerequisite to #49.