Initial commit. Should add more tests and documentation.