Reimplement splice, add benchmarks.

benchmark                old ns/op      new ns/op      delta
BenchmarkForward_1B      55.3           56.5           +2.17%
BenchmarkForward_32B     2055           903            -56.06%
BenchmarkForward_1K      208073         25966          -87.52%
BenchmarkForward_32K     82810751       4227493        -94.89%
BenchmarkReverse_1B      54.4           54.5           +0.18%
BenchmarkReverse_32B     1914           742            -61.23%
BenchmarkReverse_1K      212843         25995          -87.79%
BenchmarkReverse_32K     83663557       4226441        -94.95%