Merge pull request #14 from eaburns/re1

Change Match to take Runes and match next with wrapping.
Add benchmarks.

Here's a benchcmp comparison with go's standard regexp package:
benchmark                         old ns/op     new ns/op     delta
BenchmarkRegexpMatchEasy0x32      129           34426         +26586.82%
BenchmarkRegexpMatchEasy0x1K      332           1074961       +323683.43%
BenchmarkRegexpMatchEasy1x32      109           33746         +30859.63%
BenchmarkRegexpMatchEasy1x1K      1034          1039288       +100411.41%
BenchmarkRegexpMatchMediumx32     201           2288          +1038.31%
BenchmarkRegexpMatchMediumx1K     72060         1132776       +1471.99%
BenchmarkRegexpMatchHardx32       3893          944609        +24164.29%
BenchmarkRegexpMatchHardx1K       114819        45691695      +39694.54%

benchmark                         old MB/s     new MB/s     speedup
BenchmarkRegexpMatchEasy0x32      246.50       0.93         0.00x
BenchmarkRegexpMatchEasy0x1K      3083.54      0.95         0.00x
BenchmarkRegexpMatchEasy1x32      292.74       0.95         0.00x
BenchmarkRegexpMatchEasy1x1K      989.54       0.99         0.00x
BenchmarkRegexpMatchMediumx32     4.97         0.44         0.09x
BenchmarkRegexpMatchMediumx1K     14.21        0.90         0.06x
BenchmarkRegexpMatchHardx32       8.22         0.03         0.00x
BenchmarkRegexpMatchHardx1K       8.92         0.02         0.00x

Clearly there's some work to be done ☺
Remove allocations in the match loop.

With and without:
benchmark                         old ns/op     new ns/op     delta
BenchmarkRegexpMatchEasy0x32      34046         27073         -20.48%
BenchmarkRegexpMatchEasy0x1K      1064493       764539        -28.18%
BenchmarkRegexpMatchEasy1x32      33871         23985         -29.19%
BenchmarkRegexpMatchEasy1x1K      1034456       632842        -38.82%
BenchmarkRegexpMatchMediumx32     2233          6010          +169.14%
BenchmarkRegexpMatchMediumx1K     1093939       729869        -33.28%
BenchmarkRegexpMatchHardx32       956303        499880        -47.73%
BenchmarkRegexpMatchHardx1K       45523530      23684231      -47.97%

benchmark                         old MB/s     new MB/s     speedup
BenchmarkRegexpMatchEasy0x32      0.94         1.18         1.26x
BenchmarkRegexpMatchEasy0x1K      0.96         1.34         1.40x
BenchmarkRegexpMatchEasy1x32      0.94         1.33         1.41x
BenchmarkRegexpMatchEasy1x1K      0.99         1.62         1.64x
BenchmarkRegexpMatchMediumx32     0.45         0.17         0.38x
BenchmarkRegexpMatchMediumx1K     0.94         1.40         1.49x
BenchmarkRegexpMatchHardx32       0.03         0.06         2.00x
BenchmarkRegexpMatchHardx1K       0.02         0.04         2.00x
Quickly fail on obvious non-matches.

With and without:
benchmark                         old ns/op     new ns/op     delta
BenchmarkRegexpMatchEasy0x32      27073         5603          -79.30%
BenchmarkRegexpMatchEasy0x1K      764539        47084         -93.84%
BenchmarkRegexpMatchEasy1x32      23985         4238          -82.33%
BenchmarkRegexpMatchEasy1x1K      632842        45276         -92.85%
BenchmarkRegexpMatchMediumx32     6010          4406          -26.69%
BenchmarkRegexpMatchMediumx1K     729869        77179         -89.43%
BenchmarkRegexpMatchHardx32       499880        489945        -1.99%
BenchmarkRegexpMatchHardx1K       23684231      23179424      -2.13%

benchmark                         old MB/s     new MB/s     speedup
BenchmarkRegexpMatchEasy0x32      1.18         5.71         4.84x
BenchmarkRegexpMatchEasy0x1K      1.34         21.75        16.23x
BenchmarkRegexpMatchEasy1x32      1.33         7.55         5.68x
BenchmarkRegexpMatchEasy1x1K      1.62         22.62        13.96x
BenchmarkRegexpMatchMediumx32     0.17         0.23         1.35x
BenchmarkRegexpMatchMediumx1K     1.40         13.27        9.48x
BenchmarkRegexpMatchHardx32       0.06         0.07         1.17x
BenchmarkRegexpMatchHardx1K       0.04         0.04         1.00x
Cache machines in the Regexp.

With and without:
benchmark                         old ns/op     new ns/op     delta
BenchmarkRegexpMatchEasy0x32      5603          1366          -75.62%
BenchmarkRegexpMatchEasy0x1K      47084         41247         -12.40%
BenchmarkRegexpMatchEasy1x32      4238          1368          -67.72%
BenchmarkRegexpMatchEasy1x1K      45276         40968         -9.51%
BenchmarkRegexpMatchMediumx32     4406          247           -94.39%
BenchmarkRegexpMatchMediumx1K     77179         71019         -7.98%
BenchmarkRegexpMatchHardx32       489945        490462        +0.11%
BenchmarkRegexpMatchHardx1K       23179424      23500015      +1.38%

benchmark                         old MB/s     new MB/s     speedup
BenchmarkRegexpMatchEasy0x32      5.71         23.42        4.10x
BenchmarkRegexpMatchEasy0x1K      21.75        24.83        1.14x
BenchmarkRegexpMatchEasy1x32      7.55         23.38        3.10x
BenchmarkRegexpMatchEasy1x1K      22.62        24.99        1.10x
BenchmarkRegexpMatchMediumx32     0.23         4.04         17.57x
BenchmarkRegexpMatchMediumx1K     13.27        14.42        1.09x
BenchmarkRegexpMatchHardx32       0.07         0.07         1.00x
BenchmarkRegexpMatchHardx1K       0.04         0.04         1.00x
A bunch of minor optimizations.

With and without (helps a lot on the "hard" cases):
benchmark                         old ns/op     new ns/op     delta
BenchmarkRegexpMatchEasy0x32      1366          1260          -7.76%
BenchmarkRegexpMatchEasy0x1K      41247         33421         -18.97%
BenchmarkRegexpMatchEasy1x32      1368          1248          -8.77%
BenchmarkRegexpMatchEasy1x1K      40968         34400         -16.03%
BenchmarkRegexpMatchMediumx32     247           243           -1.62%
BenchmarkRegexpMatchMediumx1K     71019         45845         -35.45%
BenchmarkRegexpMatchHardx32       490462        123835        -74.75%
BenchmarkRegexpMatchHardx1K       23500015      5925517       -74.79%

benchmark                         old MB/s     new MB/s     speedup
BenchmarkRegexpMatchEasy0x32      23.42        25.38        1.08x
BenchmarkRegexpMatchEasy0x1K      24.83        30.64        1.23x
BenchmarkRegexpMatchEasy1x32      23.38        25.63        1.10x
BenchmarkRegexpMatchEasy1x1K      24.99        29.77        1.19x
BenchmarkRegexpMatchMediumx32     4.04         4.11         1.02x
BenchmarkRegexpMatchMediumx1K     14.42        22.34        1.55x
BenchmarkRegexpMatchHardx32       0.07         0.26         3.71x
BenchmarkRegexpMatchHardx1K       0.04         0.17         4.25x