Implement  AES/CBC/PKCS5Padding mode with initialization vector

Hi,

This pull request enhances lock-key to use AES/CBC/PKCS5Padding mode, and to return the initialization vector used as the first 16 bytes of the encrypted data. The decryption function has been similarly updated to take the IV from the first 16 bytes of the encrypted data it's given.

I also added type hints, to avoid Java reflection, and I changed encrypt to allow either a string or a byte array as the plaintext input.

Best,
Paul