[WIP] Group dot

Todo:

- [ ] fix the grad. Tests are done
- [ ] doc
Here is some doc we could reuse.


W is a 3D tensor with dimensions with (g, h, y)
h is a matrix with dimension (b, h)
c is a vector with dimension b
bias is a matrix with dimension (g, y)

For each example i in the minibatch of size b it computes:

GroupDot = h[i,:] * W[c[i],:,:] + bias[c[i]]

Basically, it index first dimension of W with c, and do dot product between h and W.

Its inputs are:
GroupDot(g: range of values of c)(h, W, biases, c)