WIP: more accurate constant specialization (less hiding errors)

Following up on the thread "question about constant-folding and shape assumptions" on theano-dev circa March 19 2013, this PR is trying to be more conservative about constant specialization.  Mainly the point is to avoid optimizing (ones * x) -> x when the ones is not broadcastable in some dimension that turns out not to match x at runtime.  I suspect this bug can be used to get an optimized graph to produce a wrong answer, but I have not yet shown it.  Currently there is some dispute over whether the current behaviour is actually a "bug".