Start reworking tests to use promises

Jasmine's crazy asynch testing doesn't allow any abstraction, and it's
just unusable at scale. Switch to promises so we can regain sanity.