Initial implementation of struct-type contract generation.

There are two ways.
1. If there is no way to generate a valid contract you can fail to generate the static-contract in type->contract.
https://github.com/plt/racket/blob/master/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/private/type-contract.rkt#L537
2: If there is a way to generate a valid contract, but after optimizing we haven't reached that point, you can fail to translate the static contract to a contract.
https://github.com/plt/racket/blob/master/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/static-contracts/instantiate.rkt#L33

I think in this case option 1 is better.