Initial implementation of struct-type contract generation.

Doesn't this require `(listof static-contract?)` as input? I might also change it like the other structural contracts so that it only takes one contract in instead of list.