Adding support for better AES Transformations that use an IV

The old  Crypto APIs did not support AES transformations, which require the use of the IV in the `Crypto.decryptAES(..)`
Hence if you used a transformation like `AES/CBC/PKCS5Padding` `Crypto.decryptAES(...)` would fail.

This should address issue #3594 
Instead of checking `null` manually you could also use `Option(...)` to construct `Some` or `None` and then `map` to Base64 encode the `Some`.

```scala
val cipherText = cipher.doFinal(value.getBytes("utf-8"))
val iv = Option(cipher.getIV())
Some((cipher.getIV())) else None
val j = Json.obj(
  "t" -> Base64.encodeBase64String(cipherText),
  "iv" -> iv.map(Base64.encodeBase64String)
)

(I split out `cipherText` onto a separate line too, so that we only do Base64 encoding inside the JSON serialization.)