[FileReader] Create ProgressEvent with lengthComputable false when the total size is unknown

This CL introduces ArrayBufferBuilder that abstracts all the ArrayBuffer
building operation and makes fix equivalent to the following:

Make totalBytes() return non-negative value when the total length is
determined, and -1 otherwise, so that we can use it to compute parameters for
ProgressEvent.

Use m_rawData->byteLength() directly instead of storing the size of
m_rawData in m_totalBytes and using it. m_totalBytes will be used to hold a
value to be returned by totalBytes().

Update m_totalBytes in didFinishLoading() only when m_variableLength is set.
Otherwise, return value of totalBytes() may rewind. This should be better
behavior.

Bug fixes
- Fix a bug in buffer growing code. When increasing the size of buffer, it
  drops data if
  (new data size) + (current buffer used) > 2 * (current buffer capacity)
- Don't check buffer size limit in ReadByClient mode. ReadByClient mode
  doesn't use m_rawData, so this is unnecessary.

Clean ups not changing user facing behavior:
- Rename "length" in didReceivedData() for readability
- Factor out the code saving new data to m_rawData into a separate method
- Factor out buffer expanding code into a separate method

BUG=none

Review URL: https://codereview.chromium.org/25657006

git-svn-id: svn://svn.chromium.org/blink/trunk@159855 bbb929c8-8fbe-4397-9dbb-9b2b20218538