Blocky inversion of gravity and magnetic data

This PR will migrate the `harvester` inversion to the new inversion framework. It will also unify the planting inversion with traditional inversion methods in the same classes in the new `fatiando.gravmag.blocky` module.

The idea is to get something like this to work:
    
    misfit = Gravity(x, y, z, gz, mesh)
    # Run the planting inversion
    solver = misfit + 0.1*Compactness(mesh)
    solver.config('planting', seeds=seeds(points, mesh), threshold=0.01).fit()
    # Or run a smooth depth-weighted inversion
    solver = misfit + 0.1*DWSmoothness(mesh)
    solver.config('linear').fit()

This should work with gravity or magnetic data, combinations of tensor components, prisms or tesseroids.

Checklist:

- [ ] Cookbook recipes
- [ ] Docstrings
- [ ] Doctests and unitests
- [ ] All tests pass
- [ ] Can be merged
- [ ] Changelog entry
- [ ] Deprecate or remove `harvester`
- [x] Benchmark against old implementation
- [ ] Make speed at least the same as old code