Add HttpRequest / CurlRequest / BadHttpResponseMapper

- Move Exception to its own file
- Use BadHttpDatabaseResponseException and add BadHttpResponseMapper
- Start to use HttpRequest / CurlRequest instead of relying on curl_* calls
- Some tidy