Date._* parsing methods return an empty hash in 2.0, do it since we intend to pass those tests

* Actually the C code simply allocate the Hash upfront and
  pass it to sub-matchers, leaving it untouched if nothing matches.
optimize Date.valid_date_frags?: use simple return and clear checks instead of generic and throw/catch
add a fast path for civil date creation from parsing [CHEAT]

* but MRI does it too in d_new_by_frags()!
* Takes 21.08µs vs 33.78µs for Date.iso8601("2011-03-08"),
  might not be worth it and get removed.
rewrite and optimize Date.complete_frags

* single #max_by instead of #map + #select + #sort_by + #last
* simple #count instead of #values_at + #compact
* no use in counting if :hour, :min and :sec match for every format
* do not bother setting those for simple Dates (not DateTimes)
* remove sec = min(sec, 59), this is nonsense!