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
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
Online snapshot base implementation

Includes both the master and RS sides of
the common implementation for the timestamp and
global snapshots

TODO:
 - add smalltests for added classes
Logs and hfile cleaning - ported from other branches
Refactorting timestamp impl

TODO:
 - get tests working
Refactor globally consistent snapshot

Porting up tests
Starting to refactor SnapshotOperation into a cleaner heirarchy

TODO:
 - get tests working.
Merge remote-tracking branch 'jesse/timestamp-snapshots' into snapshot-dev

Conflicts:
	hbase-server/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
	hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
Merge remote-tracking branch 'jesse/global-snapshots' into snapshot-dev

Conflicts:
	hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
	hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestSnapshotFromClient.java
	hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSnapshotFromServer.java
Export Snapshot tool
Restore Snapshot Tool
Snapshot getWorkingSnapshotDir() helpers
HBASE-6610 HFileLink - Hardlink alternative for snapshot restore
Snapshot Shell