Enforce HTTP error handling, add metrics and revamp timeout handling

Investigating timeout problems, I have refactored much of error handling to get more precise errors and metrics. Also, lots of errors from the `ClientActor` were not forwarded to the actual client, causing a timeout instead of an error message.
I have also removed some application-level timeouts (not related to transport) in `ForwarderActor` and `ClientActor`, as they handled very unlikely errors, complicated the logic, and potentially created errors themselves. For example, the `ForwarderActor` used to timeout before the `ClientActor` receives an HTTP timeout.