Project refactor for Issue #24

This is the discussed project restructure (without any API changes).

I will make the proposed API changes on my fork next. Then if you agree and pull them, I can delete my fork and do any future work as a committer in your repo, to reduce cognitive load on you - I see you are hard at work on a Scala project.