Fix JavaScript unit test breakages from the recent Markdown changes.

The Markdown editor changes I recently made didn't pass the JavaScript
test suite. This brings the unit tests back to working order.
Fix issues with last update bubbles and timestamp comparison.

We had some issues with timestamp comparisons that we never really
noticed, due to pages reloading on updates.

First of all, the Last Activity timestamp recorded in the template
matched the timestamp in the Last Update resource, due to how we
converted those two timestamps, but neither of those matched any
timestamp fields in any other API resources. This is because we
serialized the two former timestamps ourselves using isoformat(), but
the API uses DjangoJSONEncoder, which further normalized the timestamps.

Because of this, we couldn't compare timestamps from API calls to the
last activity timestamps. Now that Djblets's json_dumps uses
DjangoJSONEncoder for timestamps, we can use that instead of calling
the 'date' filter ourselves, and get some consistency across all
timestamps.

Now that that's done, we can mark the review request as updated when we
publish a reply, preventing an update bubble from appearing.
Provide better dirty state calculation for Markdown inlineEditors.

Getting the text contents of a CodeMirror widget every key press is
expensive, and resulted in some noticeable typing lag. Now that
inlineEditor allows callers to override dirty state calculation,
MarkdownEditor can provide its own implementation that just asks
CodeMirror if it's dirty. This removes the typing lag.
Clean up the diff loading style.

The diff loading style was a bit broken-looking. The "Revision" and
"New Change" headers jumped on load, and the spinner had no padding
around it.

It's impossible to properly align the revision headers without knowing
some of the visible line numbers and content and placing it in the
table, and any best-guesses are just guesses. The next best thing is to
just not show revision information until the file has loaded, which is
what we do now. It's a bit cleaner-looking, with just a filename and a
spinner (which now has some padding around it as well).