Optimizer can now be told to not eliminate registers

While working on #51, it turned out to be a problem that the optimizer
can't deal with temporary registers that are depended upon by multiple
instructions. As a result, it will happily eliminate what it believes
are one-shot temporary registers, substituting "two-in-one" instructions.

The optimizer can now be invoked explicitly. (Previously, it was only
invoked as a side effect of issuing control flow instructions.)

There is a flag to instruct it to disable optimizations that eliminate
registers, intended to be used by the compiler when it has issued code
with multiple instructions depending on temporary registers.

Also, some refactoring. The optimizer is now in ec_optimizer.[ch].

Closes #54.