Return `Outcome::BadRequest` early if bad request
Return `Outcome::BadRequest` early if bad request

In #283, we added code to capture `Addressable::URI::InvalidURIError`
exceptions and return 400 Bad Request responses. This was in order
to prevent logging this unactionable error in Sentry:
https://sentry.io/organizations/govuk/issues/2086648123/?project=202210&referrer=slack

The fix didn't work, because we capture the exception too late in
the logic, after `context.request.path` and `context.host.nil?`
have been called in `Bouncer::App.call`. By this point, the
exception has been raised already, before we have had a chance to
call `context.valid?`, so the Sentry errors have still been
happening.

We now check `context.valid?` as the very first thing before
digging into its internals.

alphagov/bouncer,alphagov/bouncer,alphagov/bouncer