Improved acknowledgement test for cluster reroute with dry_run flag

Usually acknowledged true means that all nodes have digested the change and are in sync. When no changes are made, there is no need to push a new cluster state, no need to wait for ack either, but can't guarantee that all nodes are in sync.

When using cluster reroute with dryRun flag no changes are made, this test was based on the wrong assumption that acknowledged meant all nodes were in sync, which is not the case here.

Changed the test to only read the cluster state from the master, to check that nothing changed there after processing the cluster state update.
Introduce a new ImmutableOpenMap
this map is a "true" immutable map, encapsulating an open impl, and has a builder that allows it to be built easily.
the builder has the optimization of using clone if its being built based on an existing immutable map.
Fixed ack behaviour when no ack is expected from any node or timeout is set to 0

We now return acknowledged true when no wait is needed (mustAck always returns false). We do wait for the master node to complete its actions though. Previously it would try to timeout and hang due to a CountDown#fastForward call when the internal counter is set to 0

We now return acknowledged false without starting the timeout thread when the timeout is set 0, as starting the wait and immediately stopping the thread seems pointless.

Added coverage for ack in ClusterServiceTests
remove unneeded check...
protect ImmutableOpenMap builder from using the built map after build has been called
Stableize recoverWhileRelocating by expanding replicas at the end
Disable RestTable headers by default.
Add TimestampedTable subclass.
Add _cat/health.

% curl localhost:9200/_cat/health\?v=1\&ts=0
cluster  status nodeTotal nodeData shards pri relo init unassign
kluster green          1        1     20  20    0    0        0

% curl localhost:9200/_cat/health\?ts=0
kluster green 1 1 20 20 0 0 0

% curl localhost:9200/_cat/health\?v=1
epoch      time     cluster  status nodeTotal nodeData shards pri relo init unassign
1383341092 16:24:52 kluster green          1        1     20  20    0    0        0

% curl localhost:9200/_cat/health
1383341119 16:25:19 kluster green 1 1 20 20 0 0 0

Closes #4050.
Ignore project tmp dir.
_cat/nodes improvements.

* Handle info/stats null possibilities if cluster is in duress.

* Shorten node id.
fix test to not rely on execution of processed / ack order

also, make sure the order is consistent (as much as possible) when calling ack to processed
cleanup MetaData#Builder construction
have a better method name, and only allow to create a copy of the builder based on existing meta data when constructing the builder
cleanup RoutingTable#Builder construction
have a better method name, and only allow to create a copy of the builder based on existing routing table when constructing the builder
have IndexMetaData Builder pattern similar to other state builders
cleanup ClusterState#Builder construction
have a better method name, and only allow to create a copy of the builder based on existing cluster state when constructing the builder
cleanup DiscoveryNodes#Builder construction
have a better method name, and only allow to create a copy of the builder based on existing nodes when constructing the builder
Add missing .get() call to actually execute the update setting in RecoveryWhileUnderLoadTests
URI routing parameter does not work with Bulk API
closes #4053
URI routing parameter support with multi search API
Support URI level routing parameter for the multi search API, that will act as the default routing (unless explicitly set).
closes #4058