Implement credentials exchange and request signing

Split <code>Service::signRequest</code> into internal end external versions, external one is for signing user requests.
Implement credentials exchange (<code>exchangeToken</code> method).
Add tests for <code>signRequest</code> and <code>exchangeToken</code>.