Map is a structured pattern-matching language which is compiled to FP code
and can be used in FP programs.
The patterns are defined in a table. At any time, the first applicable
pattern is replaced by its replacement.

e.g.
<#1 A* <#1 B*> C*>	=>	<#1 A* B* C*>
will match and replace
<compose, a, b, <compose, c, d>> => <compose, a, b, c, d>

<#1 <A* <#1 B*> C*>>	=>	<#1 <A* B* C*>>
will match and replace
<compose, <a, b, <compose, c, d>>> => <compose, <a, b, c, d>>
but will NOT match or change
<compose, a, b, <<compose, c, d>>>, since this has length greater than
one.

Until I come up with a better algorithm, the pattern matching proceeds
by exhaustive search.
