Migrate from jquery deferred's to es6 promises

In response to #24 this packages the es6 promise polyfill with freedom, and updates internals & demos to be consistent with a '.then' instead of a '.done' promise name.

Promises have slightly different asynchronous characteristics, so a lot of unit tests had to get an extra 'setTimeout' layer to let events fully propagate.