Added api and a few tests
Cleanup
Removes use of Object.defineProperty

Minor cleanup as well
Merge branch 'refactor'