Refactor and update tests.

Refactor source code to unify the property kit API for creating readonly and readwrite properties.
Update and add new tests to cover the new API. Introduce the concept of "locking" a property so no
assumptions are made about privacy (since nothing in JavaScript is really private).