Rename Future into Promise

This PR renames Future into Promise, and here is why:

Dart and JS use different names for a few important primitives: Array/List, Promise/Future, boolean/bool, string/String. And we are inconsistent in choosing the names.

JS
1. We use boolean over bool
2. We use string over String

Dart
1. We use List over Array
2. We use Future over Promise

It is not about just types. StringWrapper uses JS names, and ListWrapper uses Dart names.

I think since we are using a flavor of ES6, and there are many more JS programmers, we should use the JS names. 

So  `Wrapper.operation(receiver, obj); ` should be implemented in ES6: `receiver.operation(obj);`.

This is open for discussion.