Refactor to optimize for multiple format() invocations

This simplifies the traversal of the internal message pattern structure that's parsed from a message string or a pre-parsed JSON object during initialization. It stores a representation of the message pattern that's optimized for to-stringing and is much better at handling repeated `format()` invocations.

Overall this refactor yields about a 3.5x – 4x increase in performance of `format()`, and it really shines with a 30x – 40x improvement when formatting a messages with a number or date while using the runtime's built-in `Intl` objects.
Add support for "time" format type
Merge branch 'master' into perf
Update tests for new api
Update to fix errors raised from tests.

Add throw if Intl is undefined or null.
Ensure pattern exists before calling _buildFormatPattern.
Add in logic for plural offsets.
Add default value for patterns that do not consist of a format function.
Add cases for custom and undefined types.
Add NumberPart object as it was missing.
Add offset to PluralPart function.
Expose `__parse()` static private method
Throw in constructor if there is no valid `pattern` argument
Fix bug referencing undefined `NumberPart` helper class, it was removed
Remove offset logic and NumberPart. Remove custom type case.
Merge branch 'perf' of github.com:ericf/intl-messageformat into perf
Rename _buildFormatPattern() to _compilePattern()
Ensure parse returns an array if it is a string.
Merge branch 'perf' of github.com:ericf/intl-messageformat into perf
Update tests
Tweak error messages, fix jshint warns, and validate locale structure
Clean-up tests, remove commented out tests and use better error checking