function createObservableFactory (fn, thisArg) {
	return (...args) =>
		Observable.create((observer) => {
			fn.apply(thisArg, [...args, (error, ...results) => {
				if (error) {
					observer.error(error)
				} else {
					results.forEach(result => observer.next(result))
					observer.complete()
				}
			}])
		})
}
given an arbitrary asynchronous function that accepts a callback function,
wrap the outer asynchronous function into an observable sequence factory.
invoking the returned generated function is going to return a new **cold**
observable sequence.
@param  {Function} fn - function to be wrapped.
@param  {thisArg} [thisArg] - optional context.
@return {Function} - cold observable sequence factory.