Offer storage

A few goals, so far, for the offer_storage branch:

* resolve offer greed -- #70
* refactor offer storage into its own set of interfaces, of which the scheduler is a client
* refactor scheduler.go to be more cohesive (pull things out that belong in separate source files)
* initial set of unit tests for offer management

Currently a WIP. At the time of this writing, there has been a ton of code changes without any serious testing.