- Only run local optimizers on the ops they are registered for.
- Fix existing optimizers in base code to register properly.
Make PatternSub register the proper trackings and fix a bunch of call sites of local_optimizer to use the proper calling form.

Most of the tests pass now, except a bunch in the Cuda backend.
Fix local_optimizer() call sites in cuda and gpuarray backends.
Add subtypes of CAReduce since the match is type-exact.
Make debugprint() support int, long, float and ndarray.

This easy debugging as we don't always know the object type.
make local_subtensor_of_alloc detect the right broadcast pattern more frequently.

reported by Ira Korshunova
Fix the case where local_subtensor_of_alloc wasn't computing the right broadcastable. It was due to a wrong broadcastable in Subtensor.make_node()
get_scalar_constant_value() support more Elewmise op.

Needed to detect the right broadcast pattern.
Small modif to make the output of get_canonical_form_slice() simpler<

and test that the opt was applied.
Try to detect when gcc incorrectly identifies processors as -avx
Fix crash during error reporting.
Make Subtensor.make_node() detect more broadcastable dimensions.
Add unbroadcast in an opt.
re-enable get_scalar_constant_value() on Second when only the value is constant.
Make Subtensor.make_node detect more broadcast pattern.
small code clean up following code review
Don't always instantiate new object.
Copy GpuSubtensor to the new back-end, enable its test.
Add the opt to move IncSubtensor to the new GPU back-end.
GpuIncSubtensor continued, not finished.