device/fido: move protocol detection into FidoDiscovery

This moves the AuthenticatorGetInfo request to determine whether an
authenticator supports the kCtap ProtocolVersion out of FidoTask and
into FidoDiscovery. As a result, no half-initialized FidoDevice
instances are passed into the FidoRequestHandler and FidoTask
subclasses.

This is going to make it easier to centralize checking of certain
request preconditions, like AuthenticatorSelectionCriteria e.g..
Currently checking for those is handled within FidoTask (after
completion of the AuthenticatorGetInfo dance), and therefore
TouchIdAuthenticator evades it. Determining FidoDevice capabilities
upfront allows us to move these checks out of FidoTask such that
TouchIdAuthenticator can be covered by them.

Bug: 678128
Change-Id: Ie0f9101eeca5ee6d0fbf2d7f8885d9a1dc46d032
Reviewed-on: https://chromium-review.googlesource.com/1135120
Commit-Queue: Martin Kreichgauer <martinkr@google.com>
Reviewed-by: Jun Choi <hongjunchoi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#575466}
16 files changed