Much of the aforementioned patch.

As of this commit all the tests are passing on java7/java8
and scala 2.10.4/2.11.2. Each of the four permutations has
slightly different source code though.
Culling abstractions which aren't carrying their weight.

The size/index situation is much cleaned up but not there yet.