Executes queue.
@method now
@returns {Promise}
@example
it('types name into field', () => {
click('Name');
type('John Doe');

return now();
});
@example
it('works with async callbacks', (done) => {
click('Name');
type('John Doe');

now().then(done, done.fail);
});
@example
it('works with async functions', async () => {
click('Name');
type('John Doe');

await now();
});
 
Adds function(s) to execution queue.
@method now
@param {...Function} functions Functions to add.
@throws {TypeError}
@example
it('chooses behavior', () => {
now(
() => now.text('Welcome back')
.then(
() => now.click('Log in'),
() => now.click('Sign up')
)
);

return now();
});
function now() {
		if (arguments.length) {
			enqueue.apply(
				null,
				Array.prototype.map.call(arguments, (item) => {
					if (!instance(item, Function)) {
						throw new TypeError('pass functions to now()');
					}

					return item;
				})
			);
		} else {
			const queue = now.queue;
			now.queue = [];

			return queue.reduce(
				(chain, item) => chain.then(item),
				Promise.resolve()
			);
		}
	}