first pass at adding GCM support

I've only tested this with AES so far, and the additional authenticated
data probably isn't actually optional in this commit. I *have* verified
that encryption/decryption works in both directions when interacting with
cryptography.io's OpenSSL backend. So that's a plus.
poor man's benchmarking
Clean GCM template logic a bit; add a simple test
Minimal GCM docs and tests
Merge branch 'gcm'