Fix problems with the "New updates" flags showing up too often.

When replying to a review, if one waited long enough, they'd see a bubble pop
up that said "New updates by me". The issue here was that we were setting the
last updated time to be a time that included milliseconds, and then we'd later
fetch the last-update resource, which would give us a time that didn't include
milliseconds. Since those didn't match, we'd show the updates bubble.

I've changed the API encoder to never include milliseconds in serialized
datetimes. This makes it so that the data we send after saving a new datetime
field to the database is the same data we send after reading it back from the
database.

Testing done:
* Replied to a review and saw that it was setting the lastUpdated time to a
  timestamp that didn't include milliseconds. Waited to see it do a
  last-updated check and didn't see the updates bubble.
* Ran djblets unit tests.
* Ran reviewboard unit tests.

Reviewed at https://reviews.reviewboard.org/r/5438/
Add DjbletsJSONEncoder for lazy string and datetime serialization.

We had two places where datetimes were serialized to chop off the
extra precision. Turns out we needed a third, for json_dumps. These
other places also didn't know how to handle lazy strings, which only
json_dumps knew how to do.

There's now a DjbletsJSONEncoder that can take on these
responsibilities. BasicAPIEncoder, ResourceAPIEncoder, and json_dumps
now make use of this instead of DjangoJSONEncoder.