Optimizes multibyte parsing

String#index and String#[] has terrible performance, O(n),when multibyte
characters are included in the string. So this uses the stdlib
StringScanner and uses regexp for all matching.

Relevant links:

* https://bugs.ruby-lang.org/issues/8129
* #73 - https://github.com/kschiess/parslet/issues/73

Big thanks to @nobu and @charliesome for their help and suggestions
Speed improvements

Caching regular expressions, rewrote all other source methods for speed.