Propagate shape information to ConvOp gradients

Another attempt at closing #2089, as an alternative to #2095.

I just went through `theano/tensor/nnet/conv.py` from top to bottom trying to understand and clean up the shape inference code. Changes are:
* In `has_all_shape()`, `nkern` and `bsize` default to `1` so they can be omitted to just check for completeness of `imshp` and `kshp`.
* `getOutputShape()` supports symbolic shapes and shapes including `None`s. Also it returns a tuple instead of a numpy array.
* `imshp`, `kshp`, `imshp_logical`, `kshp_logical`, `outshp` and `fulloutshp` are guaranteed to be tuples after `__init__()` was called, but can contain `None`s. All the code is adapted to this.

I just tested this with `theano/sandbox/cuda/test_conv_cuda_ndarray.py:test_gemm_grads` and found that I had to disable shape inference (`infer_shape()`) by unconditionally raising a `ShapeError` for it to work. So probably something is wrong, but I cannot look into this today. Regard this as "under construction", but let me know if you have any comments.
> This is not a mistake on ConvOp, but sometimes it comes to light during optimization that a certain dimension is broadcastable.

I don't see why this comes to light when replacing `GpuAlloc` with another `GpuAlloc`, though. Both check the shape to see which dimensions are of length `1` and thus broadcastable: https://github.com/Theano/Theano/blob/master/theano/sandbox/cuda/basic_ops.py#L3211
And the replacement op sees exactly the same input as the original op: https://github.com/Theano/Theano/blob/master/theano/sandbox/cuda/opt.py#L1701
How can the broadcast pattern change?

> However if those errors start popping up in all sorts of places that would be unwieldy. So I'm not sure what to do except that I feel that crippling infer_shape() of ConvOp is not the right solution.

It's possible that my changes made it less crippled than before, i.e., before it was raising a `ShapeError` in more cases than now, hence the problems. I agree that the best solution would be not to raise a `ShapeError` ever, because with my changes the output shape should be inferred correctly even for symbolic input shapes. But it seems there's a bug somewhere. Does Theano's floor division work the same way as in regular Python?