fix bug in flat struct/dc predicate implementation
contract improvements

- add a generator for cons/c
- make flat-rec-contract not just build the predicate, meaning:
  - it has a better name
  - it can do random generation
- make the procedures that come from any/c random generation indicate that from their names
- make or/c with one argument just (check and) return that argument, so
  (or/c (or/c number?)) has the name 'number?'
add a random generator for struct/c

This is actually done by adding a generator for struct/dc in the case
that there are no dependencies, so it'll also work for such contracts.