Start splitting up encryption code.

Using a pluggable system will let us reduce our reliance on mcrypt and
remove the hard requirement on mcrypt. It will also enable us to have an
SSL adapter for more maintained library implementations.
Work more on crypto instances.

OpenSSL does not support 256bit blocksized AES, this means we cannot
provide a compatible implementation or rijndael.

Make the engine() method accept an instance so that developers can force
mcrypt/openssl as necessary.
Fix and implement cross engine decryption.

Sort out the nasty problems that were preventing Mcrypt and OpenSSL
backends from decrypting each others ciphertext.

Add a test to show how each engine can decode its own and the other's
cipher texts.
Add test cases for mcrypt/openssl.

Also include a test to show that 2.x data can still be decrypted now.
Fix failing tests.

I cocked up the tests the first time around.
Default to mcrypt.

This will be the least incompatible change for users who have both
openssl and mcrypt installed. Encrypted data from old mcrypt cannot be
decrypted with openssl as the padding scheme is incorrect (null bytes
instead of PKCS#7).
Code review comments.
PHPCS errors.
Fix version numbers.
Switch default crypto implementation.

Because openssl will be better in the long term, make it the default
implementation used if the openssl extension is installed. While this
will cause some short term pain, app developers can switch the app
around by including one line in their bootstrap.
Fix version numbers.
Merge pull request #5496 from cakephp/no-mcrypt

Remove hard dependency on mcrypt