Fixed issues with event processing in cluster nodes.

- Repeated failed to process events were logged because the head of
the event queue wasn't being removed. Instead, the queue was traversed
through its iterator and the Iterator.remove() were being called only
upon a success. Hence further processing tasks got the same event that
kept failing.

- It was possible that a REMOVE event was queued while its corresponding
ADD event wasn't yet processed, leading to unnecessary logging of a failed
ADD event, since the object was already deleted from the catalog. Added a
check to verify whether a REMOVE event for the same object is scheduled
before complaining when processing a ADD/CHANGE event whose object is not
found in the catalog.

- The Hazelcast synchronizer was not aware of application lifecycle, so
when a node joined the cluster it starts trying to process events before
the application is fully loaded, and keeps processing events when the
application is shuttting down. Added a 'started' state to HzSynchronizer
that's set to true once the app is ready and to false when it's shutting down,
preventing the attempt to process events when the catalog is in a state of
flux, which is specially problematic with jdbcconfig. This avoids
ConcurrentModificationExceptions to be thrown while the synchronizer tries
to notify the catalog listeners which are being added/removed, and hence
may try to notify a catalog listener that's no longer valid.

- Homogeinized the log messages to contain the current and origin node ids
and a consistent representation of the events.

- Guarded the traversal of catalog listeners using a local copy since the
GeoSever's CatalogImpl.listeners list is not thread safe.
Check if missing objects are present in the raw catalog
Cluster CacheProvider for jdbcconfig, and make cluster config event dispatch wait for acks.

One of the issues with outdated info (e.g. FeatureTypeInfo attributes) when querying
a cluster member is that the jdbcconfig catalog's ConfigDatabase uses a local cache
of CatalogInfo objects by default. Hopefully it uses a plugable mechanism to find a
CacheProvider. This patch introduces a cluster wide distributed cache based on a
HazelCast distributed Map so that all cluster members use the same cache.
The number of entries in the cache is unbounded but they expire and are evicted after
5 minutes of being last accessed.

The other issue is that a client modifying a CatalogInfo object through the REST API
to one cluster member, and immediately after querying (say, through WFS or REST) that
object to another cluster member, may see outdated info due to the HazelCast topic message
not having reached the second member or not having been processed yet (which forces
the geoserver catalog to clear any cached data especially in the ResourcePool, , but
also in the eclipse EMF schemas held on by the GeoServer WFS xml configuration objects).
This patch introduces an ack callback message so that the cluster member issuing the
change event can wait up to a reasonable period of time for other members to signal back
that they received and processed the event.
Make RemovedObjectProxy implement accept(CatalogVisitor)

RemovedObjectProxy is used to notify the local CatalogListener's
that anotehr cluster member has removed such CatalogInfo object.
Yet it didn't proxy the accept(CatalogVisitor) method so the
ResourcePool CatalogListener in charge of cleaning up locally
cached resources such as DataStore instances didn't have a chance
to run, leaving stale resources on every cluster node but the
one that performed the object removal.
Unit tests for cluster sync ack
Unit Tests for RemovedObjectProxy
Added eclipse metadata dir to git ignore
RemovedObjectProxy for FeatureTypeInfo can reference the FT's parent DataStoreInfo.  Also fixed some unit tests that weren't actually testing anything.
add hazelcast-cluster dependency for aws configuration
upgrade hazelcast from 2.3.1(2012) to 3.3.1 (2014)
Add git info to META-INF/MANIFEST.MF
Ensure cluster is not accessed when shutting down or closed.

Trying to access the cluster when it has been shut down can result
in GeoServer not being able to properly shutdown itself.
The hz map used as jdbcconfig cache was just doing so. Now it checks
if the cluster is in "running" state.
Improved logging of event ids and acks.
Make cluster events send nativeName for ResourceInfo in order for resourcepool to clean up by name
Fixed event processing hangouts.

- Made event ack timeout configurable through the acktimeout=<milliseconds>
 config property in cluster.properties. Defaults to 2000ms, and controls
 for how long a node that issued a ConfigChangeEvent waits for other nodes
 to send back an ack message indicating it has processed the event.

- Removed event queue in HzSynchronizer.onMessage. Instead, made it
  so that the Runnable scheduled to be run after 'syncDelay' holds the
  specific event to process. Rationale is the thread pool executor already
  holds a queue of pending tasks so the double queuing is unnecessary,
  plus a high concurrency stress test makes some nodes block after receiving
  events but never gets to process them, possibly due to concurrency issues
  while manipulating the queue. Now the events get processed as expected
  and much more fluidly.

- Passing nativeName as constructor argument for RemovedObjectProxy, which
  was missing from commit b9589db06.

- Made ReloadHzSynchronizer.processEvent return immediately after scheduling
  the config reload to a thread pool executor that's gonna discard tasks
  if there is one already scheduled.

- Fixed HzSynchronizerTest.captureExecutor to capture all calls instead of
  the last one.
Adapt HzCacheProvider to Guava Cache interface changes
Merge pull request #76 from groldan/master_2.6.x_clustering_improvements

Port clustering improvements from 2.4.x to 2.6.x (master)