Implement a 2D convolution kernel that matches the reference implementation.
The kernel should perform 2D convolution with the given specifications
We will benchmark different sizes, kernel sizes, channels and batch sizes but they will all 
be even numbers with the exception of batch size which can sometimes be 1
We assume no padding and striding and instead vary the size of the input and kernel,
number of channels, and batch size.

Input: Tuple of (input_tensor, kernel)
  - input_tensor: 4D tensor of shape (batch, channels, height, width) with arbitrary values
  - kernel: 4D tensor of shape (channels, channels, kernelsize, kernelsize) with arbitrary values
Output: 4D tensor of shape (batch, channels, height-kernelsize+1, width-kernelsize+1) with convolved values
