Distinguish different types of TV search filters
program-box rendering: Differentiate between program vs. classification code
program-box: Show a different classification html for tv-series'
Force season and episode fields to be numbers

* Also, only parse them in XML-import when the programType == tvEpisode
* Also, make linkTvSeries a bit faster by preloading tvSeriesNames
Rename utils.asDate -> utils.asDateTime
Add a real utils.asDate
Support optionally-authenticated-http-handlers

Whether the user is authenticated is determined by the existence of req.user.
Combined /public/search/ and /programs/search --> /programs/search
Basics for showing episode list and episode details under a tv-series
Use sequenceId in complaint-email
Support nested program-boxes in buttons
Fix categorisation-form selectors to work with nested program-boxes

* Pass in appropriate $program-box instead of id to simplify locating the form.
* Remove unnecessary UI-updates when categorisation done, searchPageApi.programDataUpdated will deal with it.
Change searchPage.programDataUpdated param from $row to program

programDataUpdated can find the $row by the id.
Make program deletion work with nested program-boxes
Do not show deleted episodes in list
Fix tv-series classification failures

* Fix tv-episode being moved from one series to another not recalculating old series classification
* Fix tv-episode removal not recalculating series classification
* Fix rootEditMode and relclassification failing for tv-episodes with no parent (~1500 from import)
* Fix tv-series classification taking deleted episodes into account
Can't propagate showDetails to parent program-box

Only the first program-box should handle this event. For any parent program-boxes, the program param will not match the programBox-data.
Trigger showDetails event when showing episode-program-box
Show classifications summary per season in episode list
Remove unused var, clean whitespace
Denormalize count of episodes into tv-series program

* schema: Move program.tvSeriesCriteria and program.tvSeriesLegacyAgeLimit into program.episodes: { count, criteria, legacyAgeLimit }
* Show episode count from denormalized version when rendering program-box for a series, and only load episodes once episode list is clicked open
* Show spinner when loading episode list (bold&beautiful has > 400 episodes...)