MBS-3841: Beginning work on rendering /release through Knockout
MBS-3841: Correctly render relationships on recordings and their subrelationships
MBS-3841: Use MB.Entity where possible
MBS-3841: Separate CSS/JS from the release HTML
MBS-3841: Also use MB.entity for artist credits
MBS-3841: Use ko.observable() only on things that will change
MBS-3841: Leverage more of MB.entity rather than defining new classes
MBS-3841: Correct definition of Medium.positionName; remove duplicate editsPending binding
MBS-3841: Move JSON release generation to a [%- PERL -%] block

Unfortunately, Template Toolkit doesn't let you pass undef to a
filter function - instead it gets silently coerced to the empty
string. But the empty string is different to 'null' in JSON, so
we end up getting strange behaviour when displaying null track
lengths.

By using a [%- PERL -%] block, we get sligthly better tools for
abstraction (so the generation is shorter), but more importantly -
we can preserve undef.
MBS-3841: Correct the rendering of track.length when it is null

formatTrackLength returns the empty string if track.length is null,
but the previous behavior of the /release page was to print '?:??'
MBS-3841: Do not set MB.entity.Recording.relationships
MBS-3841: Make sure that recording ratings still work

This was the last bit of remaining TT code - I've mostly copied the
TT macro verbatim, and then modified it to use Knockout where
possible.
MBS-3841: Update to include the 'recording.video' property
Merge branch 'mbs-3841' into beta