Implement Block-test

The B-test is a test for the two-sample problem for high-dimensions.

This is an implementation of:
- Zaremba, W., Gretton, A., Blaschko, M. B-tests: Low Variance Kernel
  Two-Sample Tests (NIPS)
I don't see a reason this shouldn't work, but I suspect it is much slower than it could be. As a first step, you could make the kernels take the full `X` and `Y` matrices along with the indices for each and use `for` loops to sum along the desired indices (with the inner loop summing along the first dimension), which would avoid allocating temporaries for `X[idx1, :]`, `X[idx2, :]`, `Y[idx1, :]`, and `Y[idx2, :]`.

You would still be allocating memory for the output of each kernel evaluations. It would be possible to eliminate that as well by using a single temporary array for all kernel evaluations, but since those output arrays should be much smaller that may not be as big of a deal.

With that said, you shouldn't feel an obligation to do this now unless you want to. Performance is only going to be a problem for sufficiently large inputs, and I'm happy to try to speed this up later.