Rewrite MPIPool class to fix cPickle.UnpicklingError bug

This pull request fixes the `cPickleUnpicklingError` described in [this gist](https://gist.github.com/dfm/4176241).

The problem is quite obscure, but it was fixed after some discussion with the `mpi4py` maintainer Lisandro Dalcin (a.k.a. @dalcinl). What happens is that some MPI implementations (e.g. OpenMPI, Bull MPI) doesn't guarantee buffered messages to be arbitrarily large (i.e. `isend()` calls).

The method `close()` was further renamed to the more intuitive verb `proceed()`. The `map()` function now can only be called from the master process by design. This has great usability impact as there is no need anymore to `bcast()` data to all slaves or create dummy variables `data=None` right before `map(func, data)` calls.