First pass at raw javascript async api

@joefitzgerald, @yongkangchen,  this is a first pass at a simple implementation for the async api.  

Works with current syncronous providers as per current standards.
Adds async support via suggestionsCallback
Cancels async requests when new requests for suggestion is requested.

Async exclusive providers may cause list to rerender after the exclusive data comes in. 
Async suggestion order is not guarenteed
  Could be achieved easily but not yet implemented
No provision for communicating with async providers in order to propagate a cancellation of a request for completions
  This would be useful for when a completion provider's process can be cancelled in order to conserve resources
  We could have the initial call to buildSuggestions on the provider return a Disposable and then dispose of it when we cancel

Let me know if you have any questions, or suggestions.  I have tried this with my atom-typescript-tools and it is way more stable and predictable than the current autocomplete-plus-async implementation.  When we get a good solid implementation for this I'll write tests.
This continues an upward march until... 2^53? I suppose that's acceptable - but it might be more useful to just track the current buffer and the current buffer position, and use that to discard suggestions that do not pertain to that buffer / position?