Modal browsing, and towards visual mode (a proof of concept)

A major goal for the next release is visual mode.  This is a proof-of-concept illustrating how we can introduce a clean, modal browsing experience within our existing framework.  And hence, how we can move forward to visual mode (and others).

Design goals:

- Re-use existing code where possible.  Because, if it works, let's use it.

- To the greatest extent possible, limit changes to existing code.  Because changes introduce unintended side effects and bugs; changes always come with risk.

- Allow modal browsing.  While the immediate goal is visual mode, ultimately we may introduce other new modes too.  For example, a vim-like editing mode.  We need an architecture which allows us to move smoothly and orthogonally between modes.  Examples:
  - `normal` -> `visual`
  - `normal` -> `insert`
  - `normal` -> `hint`
  - `normal` -> `edit` -> `insert`
  - `normal` -> `edit` -> `visual`
  - `normal` -> `edit` -> `visual` -> `edit` -> `insert` (and so on)

This proof-of-concept does not introduce any new functionality.  It does:

- Introduce a class `Mode` for handling modes and mode transitions.  Basically, this implements a stack of modes using the existing `HandlerStack` infrastructure for key handling.

- Move normal Vimium key handling to a mode (`normal`).  So `normal` mode is handled just like any other mode.

- Move insert mode and passkeys handling to new modes (`insert` and `passkeys`). `normal` mode and `passkeys` mode are always on the mode stack.  They are never deactivated.  Link-hint mode is not yet incorporated.

- Provide visual feedback as to the current mode via a badge on the browser popup.

Feedback would be appreciated.