Add starting implementation and unit tests; update .gitignore