Make `ValueObject.IsInt` reflect the object's ability to convert to integer

This PR implements suggestions made in docopt.net [issue #5](https://github.com/docopt/docopt.net/issues/5).  The `IsInt` property on `ValueObject` now reflects whether the value can be converted to an integer.  Consumers of this library will likely check the value of this property prior to evaluating the related `AsInt` property.

The previous business logic is now contained in the internal property `IsOfTypeInt`, and usages have been updated appropriately.

Unit tests are located in ValueObjectTests.cs.

This PR also contains some commits that I made in the same spirit of hiding implementation details from the consumer.  The `ValueObject` constructors and its `Add()` method have been made internal.  However, since those changes are unrelated to the `IsInt` issue, you may decide to close this PR.  If you do, consider merging [the commits without these added refactorings](https://github.com/kyle-fritz-zocdoc/docopt.net/compare/ValueObjectProperties).