Exception reactoring

 * Added the full constructor to the Failed* classes
 * Cleaned up inheritance hierarchy
Whoops, missed one thing
added a getReason() to Failure that returns an Optional
Merge pull request #745 from Microsoft-CISL/weimer_exception_refactoring

Exception reactoring