More intelligent date string parsing

* Use a list of regexes to parse any number of different date formats.
* If the year isn't defined and the date is in the future, assume it's
  from last year instead. This prevents yearless dates like "12/31"
  implicitly changing from "2012-12-31" to "2013-12-31" after a new
  year. Fixes #3.