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
Fix recursive import. Do not make dnn import opt. opt stil import dnn
fix import of sandbox.cuda when nvcc not avail. Needed for doc gen
Merge pull request #2237 from aalmah/jaberg-may21

fixing #1868 Misc accumulated fixes
Merge pull request #2280 from nouiz/import_fix

Fix recursive import. Do not make dnn import opt. opt stil import dnn