catch/throw in SignedRequest#errors

change SignedRequest#errors to a catch/throw model instead of a massive (and growing) cascade of if statements

PRing this commit by itself first so that the diff in PRs to follow is more readable (they all follow this commit). also to show off what a good idea it was.