Updates to support EncryptedType in more scenarios

Various small updates and fixes in the course of using `EncryptedType` (with most column types).  Just want another pair of :eyes: if you could.

-----

Also made the `EncryptedType` accept a callable for its key (so it could change per row if it needed to).
Let's use a standard where the closing parenthesis goes to separate line:

```python
return datetime.datetime.strptime(
    decrypted_value, "%Y-%m-%dT%H:%M:%S"
)
```
On nested scenarios it makes the code much easier to read.