Implementation of static values that is generic in the notion of labels.

There are many possible notion of labels, ranging from simple string
labels, to compiler generated linker symbols, to constructors of an
enumeration. This patch introduces "Control.Distributed.Static.Generic"
where static values are parametric in the type of labels. Along the same
design as the vector package, other modules can define static values
with fixed label types all the while reusing definitions from the
Generic module.

Only compatible with base >= 4.7 due to use of new Typeable API. This
restriction can be lifted in future patches.
Reimplement "Control.Distributed.Static" in terms of "Control.Distributed.Static.Generic".

The module exports a largely backwards compatible API, with the addition
a few more combinators to complete the original set of combinators that
was shipped in this module.
Rename 'StaticLabel' to 'StringLabel'.

This is an internal type so does not affect the API. The motivation
behind this name change is to make it clear that using a string as
a label is but one possible notion of static label, of which there can
be many.
Backward compatibility with GHC < 7.8.

Using the old Typeable API, rather than the new one that ships with GHC 7.8.
Implement resolution for GlobalNames.