Fix upload diffs on IE.

We were using File.readAsBinaryString() to get the contents of an
uploaded file. While Chrome and Firefox support this still, it's
actually a deprecated function that never made it out of beta, and IE
doesn't support it.

The proper solution, which is a bit more lengthy, is to read in as an
ArrayBuffer, create a Uint8Array view around it, and then convert the
contents to characters in the payload. This works on all browsers.

Fixes bug #3441.
Reviewed at https://reviews.reviewboard.org/r/6231/