Add support for map/reduce style computation over maps.

I did not see any map/reduce style computation built in to the Hazelcast
distributed map so I took a shot at implementing one, partially to start
learning the internals of Hazelcast.

-- Commit message
This commits adds support for map/reduce style computation over
distributed maps. The map and combine operations execute locally on each
node in the cluster and the reduce operation runs on the node that
started the map/reduce operation. If the map/reduce operation is started
by the client then the reduce operation runs on the client.