Remove dynamic type check in Static Binary instance.

Currently, a dynamic type check occurs when a static value is
deserialized. The reason for this check is to preclude writing
pathological functions such as `decode . encode` that make it possible
to modify the phantom type parameter of the static value.

However, `decode . encode` is arguably the same pattern as `read .
show`, which in general is unsafe (e.g. whenever phantom type parameters
are involved) but not in any manner specific to static values. It is
debatable whether we should defensively protect against the user writing
such code through the use of extra Typeable constraints. For what is
good for the goose is good for the gander, i.e. not just static values,
yet we cannot hope to guarantee type safety whenever the representation
of an abstract type is exported in any way.

Moreover, this dynamic type check is redundant with a second type check
that occurs when resolving static values, in 'unstatic'. One can
construct all manner of static values and compose them, but they can
only be used by resolving them. Hence a dynamic type check will occur at
least once, i.e. at resolution time. There is, therefore, little value
in doing a dynamic type check earlier, while each such type check has
a non negligible performance cost.
Use default-extensions field.
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.