Move the review banner code out into a DraftReviewBannerView.

DraftReviewBannerView handles showing/hiding the banner in response to
events on the draft review, and handles the buttons on the banner.

DraftReviewBannerView is a singleton. It's created once up-front.
Callers can access the instance through
RB.DraftReviewBannerView.instance in order to show or hide the banner.
Add new models and views representing review boxes and reply UI.

The complexity around making a reply to a review or to one of the three
types of comments on a review is now safely confined to a
ReviewReplyEditor model. This knows how to save the reply and remove it
when the reply is cleared.

There's an equivalent view, ReviewReplyEditorView, for handling the
reply UI for a thread of discussion.

A ReviewBoxView manages the ReviewReplyEditorViews for each comment and
body top/bottom, as well as the collapse state and the reply banner.

A ReviewBoxListView manages all the ReviewBoxViews on a review request
page. It deals with loading the ReviewBoxes, their equivalent Reviews
(based on properties in the HTML), and handling Collapse/Expand All.

Unit tests were added for all this.

The new design drastically reduces the number of <script> tags on the
page (used to load each comment reply section). These were probably very
fast to load, but it's nice not having them, as technically they slow
down the rendering of the page, and we have fewer document.ready
handlers.