Due to the incompatibility of [enum Signature] (which dispatches a trait that
assumes signature and pubkey bytes for verification), here we add a wrapper
enum where member can just implement a lightweight [trait AuthenticatorTrait].
This way MultiSig (and future Authenticators) can implement its own verify.
Annotating a trait or enum definition with an #[enum_dispatch] attribute will register it
with the enum_dispatch library, allowing it to be used to generate impl blocks elsewhere.