rework precondition exceptions

* use google utilities
* switch to IOBE instead of IAE on negative index accesses
* switch to IOBE instead of ArrayIndexOutOfBoundsException on too-big index accesses