HBASE-6765 'Take a snapshot' interface

Add interfaces taking a snapshot. This is in hopes of cutting down on the overhead involved in reviewing snapshots.
HBASE-6571 Generic multi-thread/cross-process error handling framework

The idea for a generic inter-process error-handling framework came
from working on HBASE-6055 (snapshots). Distributed snapshots require tight
time constraints in taking a snapshot to minimize offline time in face of
errors. However, we often need to coordinate errors between processes and
the current Abortable framework is not sufficiently flexible to handle the
multitude of situations that can occur when coordinating between all region
servers, the master and zookeeper. Using this framework error handling for
snapshots was a simple matter, amounting to maybe 200 LOC.

This seems to be a generally useful framework and can be used to easily add
inter-process error handling in HBase. The most obvious immediate usage is
as part of HBASE-5487 when coordinating multiple sub-tasks.
Distributed 3PC on a generic 2PC framework

This impl leverages ZK to orchestrate the distributed operation,
and relies on 2PC operations on both the coordinator and
each of the cohort members along with a local timer to
create a distributed 3PC.

The framework is based on a builder pattern to allow easier
testing and error injection on demand. Each side (coordinator
and cohort) has its own builder that can be set via constructor.

9/15/12
 - rebased ontop of current error-handling on snapshot branch
 - fixed compile errors from rebase onto latest error handling
9/16/12
 - General cleanup and test fixes
9/18/12
 - Removing some of the typing.
 -- in short, all distributed 3PC are going to be distributedcommitExceptions.
9/21/12
 - Adding ability to fail to build a cohort operation
9/27/12
 - Cleaned up remote exception serialization
 - Removing two-phase commitable interface
10/1/12
 - Removing runnable from 2PC.
 - Removing managing of zookeeper from zkcontroller
 - cleanup javadocs to explain failure a bit more explicit.
 - rebased onto latest snapshots (current trunk)
 - Adding ServerThreads to handle waitForLatch issues with dependency scope
fixing slight race conditon in TestDistributed3PC
Offline snapshot implementation

Includes a lot of the basic tooling for running snapshots
from the master, with empty implementation for online snapshots

Basic client test for disabled table snapshots passes.
 - need to have smaller tests for each of the tasks
 - need to have a test for error handling (found issue where wasn't
	propagating the error correctly, causing the client to wait much
	longer than necessary)

Changes from original patch:
 - Moved the tableinfo to the top-level directory.
 - only including offline tests

Recent changes:
 - rebase on trunk (10/1)
 - applying comments from Matteo
	- fixing extra NN round trip as per Matteo's comment
	- fix verify WALs for snapshot type
 - fix WALReferenceTask impl
	- Switched to just referencing the logs under a server directory.
	- Also fixed issue with using the recovered.edits dir instead of the logdir
	- Added a test for ReferenceServerWALsTask
 - Adding testing for SnapshotManager
 - Renaming TestSnapshotsFromAdmin to TestSnapshotFromAdmin.
archive store file
HLogLink
Restore snapshot
Export snapshot
Snapshot shell
Move out from the region loop: take .logs reference

ReferenceServerWALsTask works on /hbase/.logs and not at region level.
Move out the ReferenceWals to avoid redundant creation of the same file.