Use better strategy to retrieve results even if an exception was thrown that forced the end of the evaluation

- Wrap a Try block around all user code and return our map no matter what with the partial results, worse case scenario
- Revert back to one single Result class
- Add wasEvaluated method to help in pruning results
- fix issue with blocks and exceptions in evaluateBlock (wrap the whole thing in a try if it's a top level block, as opposed to changing the last child which didn't work if an exception was thrown in the middle of the block)
- Add test case for exception thrown from within a block
- update test cases for exceptions with new expectations