Various refactorings and cleanups

* Clearer and more robust token validation
* Ensure decryption never happens if token is invalid
* Simplifes top-level module interface. Removes verifier block API
* Extract an Encryption module which interfaces with openssl