Add Faraday adapter

This change extracts the HTTP functionality to an Adapter module and adds Faraday support, while being fully backward compatible.
I also cleaned up the spec a bit.