Implement Element.matches().
Next stage of refactoring font system. This commit introduces
the font cache task, and adapts client code to use it. It also
cleans up some existing code paths.

- Fonts are only read once from disk while in use (they
  are discarded if the reference count reaches zero, however).
  This saves memory and prevents unnecessary reading from disk.
- It will be easier to add web font support, as all fonts
  are created and managed in a single place and the entire
  pipeline ensures that only one in-memory copy of font data
  is required.

An overview of how the pieces fit together:

FontTemplate - A structure containing everything that
is required to create (and select) font handles. This
structure is shared among all matching font handles
(via Arc).

FontTemplateData - A platform specific structure that
contains the actual font data inside a template (this is
a byte array on Linux/Android, CTFont on Mac).

FontHandle - An opaque, platform specific handle to
a font instance. Each FontHandle contains an Arc<>
reference to the FontTemplate it was created from.

FontCache - This is a separate task, that is responsible
for loading and caching FontTemplate structures. There
is one FontCache per constellation. It is only ever accessed
via the FontContext described below.

FontContext - This is the public interface to the FontCache
and is used by the layout and render code to create font
handles. These must *not* be shared between threads. There
is typically one FontContext per thread/task.
Address review comments.
Add a `task_info` crate and a `task_basic_info` module within it.

The crate provides an interface to the Mac-specific `task_info()`
function in general, and the module provides an interface to the
TASK_BASIC_INFO flavor.  Currently only the `virtual_size` and
`resident_size` values of the `task_basic_info` struct are exposed, but
there's obvious room for expansion.

This is used to implement the -m measurements on Mac.
Move compositor event handling code to a new `events` module

Also, make them free functions rather than static methods on
CompositorData.
Merge pull request #2775 from glennw/font-cache

Font refactoring work - add font cache task, cleanup various code paths.
Merge pull request #2786 from nnethercote/task_info

Add a `task_info` crate and a `task_basic_info` module within it.
Add logical geometry primitives, for CSS Writing Modes.
Update rust-layers

This fixes the Quadtree tests in check-rust-layers.

Fixes #2768.
Merge pull request #2796 from mrobinson/fix-make-check

Update rust-layers
Merge pull request #2790 from SimonSapin/abstract-geometry

Add geometry primitives in flow-relative space
Merge pull request #2789 from zwarich/compositor-events

Move compositor event handling code to a new `events` module
Merge pull request #2772 from saneyuki/match

Implement Element.matches().
Revert "Implement Element.matches()."

This reverts commit b6edd5318f3fe5c751d1c011e87adbfe0cac4fcc.
Update to latest rust-layers

Layers now store their complete boundaries, so we can eliminate the
various ways these were stored in Servo.
Remove occlusion code from compositor

This code tried to prevent buffer requests from parts of layers that
were occluded by other layers. This doesn't really make sense when
layers can potentially be semi-opaque, and also seems to have not been
totally functional.
Remove support for hiding compositor layers

This is currently unused, because we always know the size of the layer.
Remove page_size member from CompositorData

The page size is always the same as the layer boundaries since,
SetLayerClipRect was always called after layer creation.
Update to latest rust-layers