refactor tests
call in the correct context
stop throwing sync errors

even though all sync errors should be caught inside handlers it
creates strange debugging issues if that is not done properly and
as a result you can end up with errors being handled in places you
weren't expecting to have to handle them. By re-throwing all sync
errors we are being consistent.
docs