Simplify troubleshooting by reporting on node calls on failure

This change collects information about each node invocation and wraps
any exception during node invocation in a GraphExecutionException with
the additional data.
I think this should be done in the case there's no fallback configured for the graph node. In the current form, it will propagate an exception past configured fallbacks, which is a change in behaviour.