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.
Building the options here makes it susceptible to a race condition where these might change depending on the provider (depending on how long it takes us to iterate through providers). Better to build options once, and consistently supply them to all providers.