A bit of reorg--just moving the old composite model stuff to the bottom so that it's out of the way while I do a little more reorg.
A little more reorganization. This introduces the concept of 'ArithmeticModels' which are really just models that support the +, -, *, /, and ** (for now).  It made sense to distinguish these, for example, from mapping models for which those operators don't really make sense (or do they?--maybe that's a decision that could be reevaluated).  In any case making the distinction will make it easy to move things around later if need be.
Fix an unfortunate bug in ExpressionTree.traverse_postorder().  In the process I actually rewrote traverse_postorder() to be, I think, a little clearer as to what's going on.  But it still had the same bug (worse even because now it would go into an infinite loop).  But simply ensuring that one node does not have two subtrees that are the same *object* seems good enough, I think.
A couple fixes to improve debugging of non-concrete models or model classes.
Somemore rearrangement, and added an unfortunately named _CompoundArithmeticModelMeta so that an arithmetic operation on two arithmetic models can create a new arithmetic model (you'll note that for | it's possible to combine non-arithmetic models into a compound model).  This is getting a little ugly in the towering hierarchies of design sense, but I'm not married to it--I'm open to other idea.  In any case I don't think the tower needs to get any higher than this :\