Test multi-level exception handling

The exception should be transitively passed up the call stack.
Move App test into it() invocation

so that we can test correctness of each step.
Get rid of gg.result()

which is redundant; that's what we have the return keyword for!  The
other advantage to using return is that it makes early-exit less
verbose.