Refactor decrypter classes

* Decrypter classes are now Objective-C protocols/classes instead of C++ abstract/concrete classes. This avoids C++ virtual functions which are unsupported without the libc++ runtime.

* Standard crypto engine is now mostly inlined for performance.

* Encryption mode is now detected early but unsupported decryption errors are only triggered when read is attempted.

* Encryption CRC check moved to check: method.