Add t/strace_bug.t.

On Perl 5.17.0, `previous_exception` is intermittently undefined. Note that
the test uses its own stack trace class that does nothing, not
Devel::StackTrace.
Safer exception-throwing.
do not rely on $@ being untouched by assertions
when doing a ->throw, pass $@ out of band

Right now, the "previous_exception" attribute is unreliable, but you'd
hardly know it unless you're using 5.17.10.

The previous_exception attribute is supposed to store what $@ was when
the Throwable object was created.  If previous_exception isn't supplied
in the call to ->new, it defaults to whatever is in $@.  In almost every
case, it's this default that gets used.  Nobody's likely to pass in the
previous exception.

If the previous_exception default runs early, it finds the old value of
$@ intact and saves it.  If some other attribute's default runs first,
that default sub might do an eval and clobber $@.  Then when the
previous_exception default runs, it finds $@ empty.

Attributes are initialized in an unreliable order.  If you look under
the hood, you see it's hash traversal order over the hash that stores
all the class's attributes.  In 5.17.10, hash traversal order got much
less predictable.  Under 5.17.10, about half the time previous_exception
was clobbered when it had been correct previously.

This commit adds a lame hack to get a copy of $@ stored dynamically out
of band during a call to SomethingThrowable->throw.  It helps, but it's
not a panacea.  For one thing, ->new is still subject to the attribute
ordering.

We can't just put this in BUILDARGS.  For one thing, it's too likely to
get composed with (say) MooseX::OneArgNew which will result in an
unpredictable ordering of the "around" modifiers, presumably getting us
right back to this problem.

Maybe we can "around new," but for now this should be an improvement.
v0.200006

          lose old $@ in previous_exception less often under 5.17.10 (thanks,
          David Wheeler)