Adding GCM support

I have added a new protocol for gcm, updated documentation and write some test. If you can pull it.