Initial commit of project structure.

Basic interfaces and some implementation.

No tests applied, code in this commit is not functional.