Refactor to accommodate blank & invalid dates & times

Remove hour & min components in previous commit fecc88db57677869ff23330f3cf5a55d3908c3bb (as they are not currently required)

Adding support to allow string representations of dates/time.

This is to support a non dropdown web form where a user can supply
a date and time in separate input fields, if an error was to occur,
the user input should be represented to the user.

TODO:
* finish tests
* Update version number and documentation.

---

@figwit @bendilley 
Strict parsing could be enforced by reformatting the datetime and comparing it with the input.

I'm admittedly not sure what `Time.strptime` is doing, because changing the zone doesn't seem to have the effect it should.
```ruby
[7] pry(main)> Time.zone = "Pacific/Honolulu"
=> "Pacific/Honolulu"
[8] pry(main)> Time.strptime "1/9/2014 13:00", "%d/%m/%Y %R"
=> 2014-09-01 13:00:00 +0100
[9] pry(main)> Time.zone.parse "1/9/2014 13:00"
=> Mon, 01 Sep 2014 13:00:00 HST -10:00
```
`Time.zone.parse` uses a bit too much magic for my liking :disappointed:  How does it know that wasn't a US-formatted date?