Broke up the codebase, added build system