DistArrayProxy indexing with less communication

The previous PR implements indexing on engines by querying all of them; the ones that don't have an index will return `None`.  This one discovers the owning engine ahead of time and only queries that one.  It ends up being slower, since there are more round-trips per access.  It also runs into a possible bug when translating between IPython-engine-id and MPI-rank, which @kwmsmith will address (Issue #12).

A way forward would be to fetch the entire Map object back to the client at the beginning, or just implement the mappings on `DistArrayProxies` instead-of or in-addition-to on `DistArray`s.