Use the same reason as the tag of the optimization.

This allow to easily know how to disable that specific optimization.
Don't use an wrapper optimization when it is not needed.

This make the printing of the reason be simpler/more readable.
Add opt tag with the name of the opt for scan opt.

That allow to know easily witch tag to use to disable an opt.
pep8
pep8
Interface change. env feature on_prune() fct now take a reason parameter
Interface change: add param reason to env_reafure.on_import().
Add opt tag the reason used.
Do not call as_tensor_variable on other Theano variable.
typo in error message.
Add Theano flag compute_test_value_opt.
Use op.__call__() instead of op.make_node() to have test value inserted during opt.
Add test value during opt.
Fix typo in comments/error messages.
use op.__call__ instead of make_node in opt for test_value.
Add assert about shape with test_value and return True as in the the other cases.

The return value isn't used in this case, but consistency is good.
pep8
Make Alloc.__call__ support the return_list parameter
Fix Scan.grad that we making a too long scan sequence.

This in combination with PushOutSeqScan make shape error! as PushOutSeqScan make the assumption that was inforced by the scan() fct that all input sequence have the same length.

TODO: make a test for this.
Do equivalent fix in Scan.grad() on other new input sequence.

Also add assert when test_value are available.