Serialize refined types with the cereal library

This change brings in the `cereal` and `cereal-text` libraries from
Hackage as dependencies. `cereal` provides a typeclass, Serialize, for
serializing arbitrary data structors to ByteStrings. Instances can be
automatically derived through GHC.Generics. `cereal-text` provides
ready-to-use instances of Serialize for Data.Text.Text and its variants.

Instances of Serialize for data structures that represent refined types
are derived in the new module Language.Haskell.Liquid.Serialize. The
code in there currently could use some organizing and pruning: I'm sure
that there are instances in there that won't actually be used.

These instances are intended for use in the in-progress .lqhi work, in
order to save and load computed type information for verified modules.

In order for Types.TyConInfo to be serializable, the representation of
size functions had to be changed, from an actual Haskell function to a
plain data structure. In addition to being serializable, I believe that
the new representation is clearer and more direct than what it replaces.

(Ported over and cleaned up from an older branch that fell too far
behind `master`.)