Passkeys migration, structured options and popup.

Follow up to #1143.

Previously, exclusions and pass keys were represented as unstructured strings.

This PR introduces structured classes to represent exclusions, and implements that structure on the options and popup pages. Also, there is a new button to remove an existing exclusion directly from the popup page.

The PR also migrates the legacy setting `excludedUrls` to the new setting `exclusionRules`.

There are still a few issues (styling, in places), but it's ready for others (notably @philc) to try it out.  Is this going in the right direction?

Previously, all options have been treated pretty much as strings, which doesn't work so well for structured options. This PR introduces the idea of a "self-handling option".  The option itself is reponsible for generating its own DOM, and handling "save" and "reset" events.  Not sure if this is the right approach.

The feedback and comments from #1143 have been incorporated here.

As ever, further feedback and comments would be welcome.

Maybe `@rules` should be a hash instead of an array? Although probably not important with this amount of data