Add a fallible UTF-8 decoder to util

This adds a UTF-8 decoder that takes an ArrayBufferView and throws an exception
on error. |util.decodeUtf8| is left as-is as it supports just passing in an
ArrayBuffer and will sanitize the output string rather than throwing an
exception. Profiling found that passing in a Uint8Array, then wrapping it in
another Uint8Array lead to an about 40% slowdown, so I've made
|util.decodeUtf8Array| explicitly take an ArrayBufferView which avoids this
pitfall.
Attempt to use TextDecoder for parsing mod-UTF-8

When reading a string we'll now attempt to use a TextDecoder first. This is
~10X faster than manually parsing. The only time we should need to fallback to
manually decoding is if an embedded nul character is encountered, which is a
very rare occurance.
Merge pull request #504 from EricRahm/java_utf8_decode

Improve Java UTF-8 decoding