Offline purchase

While looking at direct board features for offline purchase, I found a bunch of things we were doing incorrectly. This is the basis for an offline purchase model (that does absolutely nothing) at the moment. I'm going to go back and fix all of the newly-discovered issues, but didn't want to lose my progress on this.

All tests pass.