Simplify code in `multiglob-async`

Use `Q.Promise` instead of `Q.defer` and invoke `Array.reduce` directly
from the promise chain.
Move check of the `sync` option to a single function

Instead of scattering checking and manipulation of `options.sync`
across the `multiglob-*` functions, the exports, and an error class,
define a single function to check and set it.
Process flags during input processing

Instead of passing around the operation flag characters, pass the
function to be called to merge the accumulated and new matches.
Replace Q with promise

`promise` is about 3x smaller than Q and is also ES6-compliant.