Conv gemm non-square kernel support

This add support to non-square and kernels and strides sizes. It passes all tests. 

Features:
- [x] A Filter sizes (including non-square) supported
- [x] All stride sizes supported.

This finishes some TODOs in gh-2015.
What was wrong with the way it was done before?