Use gradient_undefined instead of None in MRG uniform
Catch exception and forward NullType to input gradients, instead of failing
Try to fix how Null gradients are propagated in Scan

- propagate NullType when summing different gradient contributions
- identify which outer outputs of the scan node implementing the grad
  should be Null
- replace them, and the corresponding inner variables, with zeros
  of the appropriate size, so the scan node can be compiled and run.
- introduce a difference in undefined gradient because going through
  a shared variable with updates, and because a NullType was returned
  by the internal graph.
Actually compile and run the grad scan node.
Update comment, indentation.
Mark first batch of really slow tests.
Mark some more tests as slow and do some cleanup while there.
Declare sdot_ static.
Mark CLazyLinker_call as static.
Make the data arrays in cutils_ext static.
Enclose the op structs within an anonymous namespace to hide their symbols.
Make _executor() and _destructor() static.
Remove the sdot declaration in the test so that it may work.
Print the optimizer profile on the right destination.
Faster opt local_fill_cut
Faster and simpler opt local_mul_to_neg
Code simplication
add theano.scalar.get_scalar_type(dtype) to cache Scalar(dtype) object.

This speed up optimization.
Print more info in the optimizer profiling
Faster opt by not doing useless stuff.

This make the Canonizer take 4x less time in a test case.