Refactor common client into separate SignedRequester interface

Less repetition and coupling.
Makes it easier to continue implementing other API methods.