**Router** is now asynchronous, and expects an async "fallbackRoute" function,
which is called if no static routes match the current path.

This allows for root-level dynamic routes which invoke existing handlers.

(I wanted a way to define "permalinks" which reference other routes
in my app; eg: matt.is/talking-about-pie can redirect to
matt.is/posts/talking-about-pie)

**"snapshotToArray"** will now always return a list of objects.

If the elements are not objects, they will be returned as:

  id: <snapshot.name()>
  priority: <snapshot.getPriority()>
  val: <snapshot.val()>

(If the elements are already objects, *id* and *priority* will simply be
added as attributes)