fleshed out the validation code

The validation code should now be able to validate a SQRL request checking the enforce IP rules and that the security of the request has not been changed.

Also added a dedicated exception class to handle the various ways a request could fail validation.