Refactor core/properties

* Use JSHint code
* Utilise variables to support better optimisation
Initial commit of core/observe.

`core/observe` is a module that provides Object.observe type
functionality, but doesn't utilise polling in order to detect changes.