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.

### TODOs

- [x] Update unit tests
- [ ] Update docs
- [x] ~~Figure out how to handle offset?~~ This will be in a different PR.