Overhaul event date handling

* Query upcoming / past events on each view rather than when the
  view module is loaded
* Move date conversion logic into the view
* Move event ordering into template
* Create template tag to format dates / date ranges consistently
* Use HTML5 <time> tag to expose machine-readable timestamps