Reorganize MessageEncryptor

According to OpenSSL's documentation, cipher.random_iv must be called after cipher.encrypt and will set the returned IV on the cipher.