[RFC] started refactor for 2.0

Here is the start of my idea for a 2.0 refactor (ref #20)

Let me know what you think.

TODO:

- [x] update tests
- [x] update doc