Optimizations

The algorithm is highly sensitive to the hashing *algorithm* used here. We saw real grammars in the wild during ANTLR 4 development which had worse than O(n<sup>5</sup>) performance because we used the wrong hashing algorithm. MurmurHash 3 (used in the reference runtime) has proven successful and we haven't encountered a pathological case at this time.