Move notification struct error checking before queueing it in run loop

This PR passes back validation and serialization errors synchronously to the caller of `Send()` instead of...well...ignoring it in the run loop or having to read off of another channel.

Fixes #4