Initial Commit
Add initial implementation and some basic tests.