Exception reactoring

 * Added the full constructor to the Failed* classes
 * Cleaned up inheritance hierarchy
Merge branch 'weimer_exception_refactoring' into weimer_newHeartbeatProtocol

Conflicts:
	reef-common/src/main/java/com/microsoft/reef/common/AbstractFailure.java
	reef-common/src/main/java/com/microsoft/reef/runtime/common/driver/context/FailedContextImpl.java
Whoops, missed one thing
Merge branch 'weimer_exception_refactoring' into weimer_newHeartbeatProtocol

Conflicts:
	reef-common/src/main/java/com/microsoft/reef/driver/context/FailedContext.java
Whoops, missed one thing
added a getReason() to Failure that returns an Optional
Merge branch 'weimer_exception_refactoring' into weimer_newHeartbeatProtocol

Conflicts:
	reef-common/src/main/java/com/microsoft/reef/common/Failure.java
done with handling messages