Respond to bad requests with a 400 status code

- Previously bad requests caused PersistentConnection.ProcessRequest to throw
  resulting in a 500
- Respond with a 403 status code when the client changes identity
- No longer throwing on bad requests reduces extraneous error logging

#2522
Traces logged by TaskAsynceHelper.Catch are now warnings

- This should make it easier to filter out those traces

#2522