Properties can now consider `nil` objects as valid.

* A property might be optional (`nil` indicating no value) or `nil`
  might indicate a particular state.
* Include a special error message if a `nil` object is provided and
  `nil` objects are not allowed.
Created Float Property

* Very strict, does not accept strings of floats or integers
* Will parse BigDecimals and Floats correctly
* Gracefully fails if other data types are provided.
Created String Property.

* Confirms that the value provided was a string
* Gracefully fails if other data types are provided.
Created Boolean Property

* Confirms that the value provided is a boolean
* Gracefully fails if other data types are provided
Created Nil Property

* Confirms that the object provided is `nil`
* Gracefully fails if non-nil values are provided.