Record type sizes at Module construction time.

This change relies on
travitch/llvm-base-types@2b81083997614ddffc99f6db8e692817e4bd1c6e.

On the C++-side, the code uses DataLayout/TargetData to compute the
size of each type.  This is saved as plain data with each CType.
During the translation to Haskell, this is stored in a separate
`Map Type Int` and saved in the accompanying Module.

This means that the size of any type generated by LLVM will be valid
and available.  Types constructed manually will not have an entry
in the map (and the lookup function will return Nothing).

In theory it would be possible to compute the size of any type, but
this requires knowledge of the target ABI.  This could be done through
an external library, or by holding on to a reference to the
DataLayout/TargetData of the current Module.  New types could then
impurely query the DataLayout/TargetData to compute new sizes.  This
is left as future work, as it could be fairly complicated.  It might
be challenging since the internal class that computes struct layouts
might not be exposed in all LLVM versions.

The new functionality is available to user code with a Module m as:

```haskell
moduleTypeSizes m ty
```