Add support for Sync calls and Promises

* In case of `dataSource` is a function that undefined, previous behavior is
the same as before.
* In case of `dataSource` is a function that returns a promise, that promise is
used in place of internal call to options.callback.
* In case of `dataSource` is a function that returns another kind of value, it
is used synchronously.
Add demo for synchronous `dataSource` function
Add demo for promise `dataSource` function
Refactor removing `util` singleton
Refactor functionDataSource to allow future enhancements
Allow to case insensitive and `starts by` filter by default
Demo for client side filtering
Updated demo dependency to use a real CDN
Removed unused code