split the project into several modules. fixes #19

I did a full split on each module and got lazy for now on the tests, they are all in the testing module.