Apply a little more rigor to CaseInsenstiveString.

* Enforce consistency with `equalsIgnoreCase`
* Base `length`, `charAt`, and `subSequence` on the original String.
* Hope like hell that ScalaCheck uncovered any violations on `hashCode`. :)