Refactor checkout into several more-sensible entry points, which consolidates common options into a single structure that may be passed around.