Huge refactor

- Initial documentation effort
- Code is now more consistent
- Important new features
- Python bindings updates