Hacked dims out of codegen

Previous commit has Codegen be reinstantiated whenever QCML.codegen is
called.  This is right given that QCML.codegen() can take *args
**kwargs, but didn't help the dims resetting issue because the shapes
are in the parse tree, so even if Codegen is recreated, the shapes are
all already instantiated.

So I changed shapes so that they can have their dimensions changed even
if they have already been instantiated.

That fixed dim resetting to work correctly, but then we were redoing the
work of setting dims all over base_codegen.  It seemed to me that my
proposal from earlier today was better: to not call shapes.eval()
lazily all over codegen, but instead to try to get all the shapes re-evaled
with the new dims at the beginning of codegen.

Then it seemed maybe it should be done before codegen even starts.  So I
put it into the QCML.dims= setter function.  Now when you set dims it
traverses the parse tree and attempts (!) to call eval(dims) on all the
shapes.  I think I got all of them, but this should be checked.

Hopefully it's not too drastic a change; I think it's cleaner this way.