Updated local_alloc_elemwise to remove all allocs when possible and to a...

...dd assert only when we cannot determine whether the shapes will be correct.

Deprecated experimental.local_alloc_elemwise and enabled local_alloc_elemwise by default.

This is just the start. Next to come are the associated tests.
I don't think this case is good. Currently, this case remove the alloc or dimshuffle/alloc. This is bad, as the malloc did work its input don't have the same broadcastable then node.outputs[0]. So if this opt was applied, it would return bad answer. But as this opt change the broadcast pattern, this will make the compile warning about this opt returning bad result and skip this part.

That condition can be optimized with a different output graph. This is already done by opt local_alloc_unary and local_dimshuffle_lift. So in the else clause, just "return False".