Added `Properties` Abstraction

This PR introduces a utility module. The intent is to have general purpose helpers be exposed by this module.

The first helper added is ```setValue```. It is pass an object, a property name, and the value to set. It returns an object with a restore function. This is useful in testing and will be used in the ```Environment``` class in a separate PR.
This looks pretty good. I think that we should probably still ensure that an `Environment` is also a `Properties`.