The API functions return a promise, not the actual Download object.
In short, the following should work:
const {Downloads} = Cu.import("resource://gre/modules/Downloads.jsm", {});
var downloadPromise = Downloads.createDownload({source: "http://cdn.sstatic.net", target: "/tmp/kaki.html"})
downloadPromise.then(function success(d) {
d.start();
});
Read up on promises, and to make dealing with them a lot more fun, also Task.jsm
The API did change quite a bit recently; what is documented is the current Aurora-25 or later API. The "old" API is documented within the source.
A more complete example with Firefox <25 support is available in this gist.