opt: transpose(inv) -> inv(transpose)

This transformation canonicalizes sandbox linalg ops so that the various
cholesky-related transformations are not confused by a transpose.
opt: solve(chol) -> solve(triangular, chol)

Cholesky outputs a triangular matrix, so if a general solve is applied to
a cholesky output, then transform it into a triangular solve.
enh: infer_shapes for MatrixInverse
fix: local_log_add dont crash on >2 args
enh: tag_solve_triangular transpose case
enh: faster CGer
check if the node has an owner before accessing owner op
- remove a variable that's not used anymore
- remove unnecessary comments
adding infer_shape test for MatrixInverse Op
testing Solve perform method with specific cases for lower and upper traingular matrices
added unit tests for transinv_to_invtrans and tag_solve_triangular
registering local optimization for Solve op
improving test
Add grad() to GpuDnnConvGrad* ops
updated test so that it tests triangular theano matrices
Make test_conv_cuda_ndarray:test_conv_grads compare all ops against legacy implementation
Show more values in error message.
[CRASH] due to import order when using DebugMode on the GPU.
better error message
tmp fix to the shapes error with cudnnpool