initial commit. Most tests pass ;)