Fixed a bunch of bugs messing events up

MessageReceivedEvent now makes a copy of the payload to avoid crosstalk
between simultaneous event handlers.
Turns out endpointEvents can't have their last event removed, so now
they get a placeholder lambda.  If performance were a concern this would
be bad.