2592 - 'if' with extensions in 040.wart

Over 500 commits since I added that 'let', there's still no performance boost
or infinite loops avoided by it.
2593
2594
2595
2596 - use '+' for compose instead of ':'

Doing this was tricky for two reasons:

a) Punning can cause conflicts. What if a type extends + but is also
coercible to function? Which refinement to + wins then? Currently
resolved by only using compose if either arg is actually a function.

b) Rebinding '+ later triggered an infinite loop through if/c[ad]dr.
Resolved by binding cadr/cddr directly. The intent was only to accept
refinements to car/cdr, but they're low-level enough that it isn't
necessary.

This change also speeded up tests by a third!

We're starting to see signs we might want a more nuanced approach than
alias, where we specify precisely which symbols we want to use later
refinements for.
2597 - now infix loses its specialcase for ':'
2598 - now we can bring back comment tokens!

Found a bug in the old test for them in parenthesize.