MediaEngineTests: bring assertion exceptions to main thread

The AssertTransition() method in the tests was connecting a
PlayerEventHandler to the PlayerEngineService being tested
but it didn't have any try-catch around it, which means that
any generated AssertionException caused by a test not passing
would really be ignored (just printing a warning on the
terminal instead of making the NUnit test fail).

A new guarded_handler is now created, which calls the old one,
and which has a try-catch, which would set any exception caught
to a variable of the method, which would then later be captured.

The change of the type of the 'handler' variable is not really
a required change here, but doing it allows us to have the
compiler complain to us if we try to disconnect the old handler
instead of the new one called 'guarded_hanlder'.
MediaEngineTests: improve information about failed tests

The AssertionException recently captured in previous commit had
line numbers referring to the exact place in the
Action<PlayerEventArgs> handler where it failed, but its stack
trace didn't go deep enough to tell us which lines the callers
of AssertTransition come from.

The way to fix it is to create a new exception object in the
non-handler thread, which copies the exception message of the
captured assertion exception (and stores it as inner exception
too, just in case).

We also add a message to the Asserts in the handler in order
to distinguish better if we're comparing an event or a state.