Rework code to be Java and Android friendly

* Integrate PRNG fixes for Android
* Simplify exception throwing
* Add `equals` and `hashCode` to ciphertext and IV value class
* Use UTF-8 string encoding (and allow for other encodings)
* Clean up method names
* Clean up and clarify comments