Use ES6 Promise API rather than dojo/Deferred

This PR converts the delite code to use the ES6 promise API, as shimmed by https://github.com/calvinmetcalf/lie.  Note that shim could be replaced by any equivalent shim, or by a plugin that only loads the shim if necessary, which would fully resolve ibm-js/sdk#5.

This includes one API change: events now have a `setLoadDeferred()` method rather than a `loadDeferred` property.  Probably that function should have a better name, like `setChildInfo()`.  Anyway, `setLoadDeferred()`'s parameter is either a plain object, or a thenable (aka Promise).   The change is because ES6 Promises don't have `resolve()` and `reject()` methods, so it makes sense for the event handler to specify the whole Promise.  

```js
require(["delite/register", "delite/DisplayContainer", "lie/dist/lie", "dojo/request"/*, ...*/], 
  function (register, DisplayContainer, Promise, request/*, ...*/) {
  document.addEventListener("delite-display-load", function(event) {
     event.setLoadDeferred(new Promise(function (resolve, reject) {
      // build a file name from the destination
      request(event.dest+".html", function (data) {
         // build a child from the data in the file
         var child = a_parse_function(data);
         // resolve with the child 
         resolve({ child: child });
      }));
  });
});
```


Internally, the changes to match ES6 Promise spec are:

- Since ES6 Promises have no `cancel()` method, HasDropDown has code to manually cancel.
- You specify the resolve and reject code at the time the promise is created, like in the example above.
- `when(...)` --> `Promise.resolve(...)`

Other notes:

- DisplayContainer's `show()` and `hide()` methods were unnecessarily creating a Deferred.  I refactored the code not to do that.
When we go for ES6 promise should we just call the various variables promise something as deferred does not mean something in ES6 promise world?