Refactor to GraphFocus API

Refactor not complete, but close. Started by way of fixing a bug.
Shift of responsibilities relating to cached data

Between requests, the GraphTranfer object manages a cache of processed
GraphResponses and uses ETags to reduce the amount of response data required.

Near future, Expires and Cache-Control should be added so that some
requests can be skipped entirely