Use syntax-class instead of helper function for common code.

As suggested by @stchang
Move the syntax classes to core.rkt.

To do so, must use `(require (for-template ....))`.
Also need to require for-template `:` and `->` from typed/racket
Move the TR variations from main.rkt to typed/main.rkt and rename.

So now, main.rkt provides untyped `defn` and `defn-`, and
typed/main.rkt provides typed `defn` and `defn-`. Users pick one to
require.
Add typed-examples.rkt