Move the contract profiler to its own collection.

Should become its own package once we split up the collects.

Requested by Eli, to reduce the dependencies of the profiler collection.
Add match*? to unstable/match
Fix union merging

Trying to merge (and thus resolve) applications of struct
types would cause infinite looping on type instantiation
if the struct type used both a union and recursion.

Closes PR 13821
Improve TR test case
Fix type of gensym.
Fix dist-specs.
Remove leftover define/match docs
Minor refactoring of get-module-code in syntax/modcode.

- Clearer names.
- Less (hopefully no) shadowing.
- Used main-source-path in place of resolved-path.
  They should be the same value, and in context this way is clearer.
Turned let into define in syntax/modcode.
Similar refactoring for read-one in syntax/modcode.
Split out get-module-path function from get-module-code; apparently made a mistake.
typo
Pulled another helper function out of get-module-code.
Exported get-module-path and get-metadata-path with contracts from syntax/modcode.
Simplify the paths produced by get-module-path.
Add tests for get-module-path.
Added documentation for get-module-path and get-metadata-path.