Add Q (promise) as a dependency
Use promise to avoid which.sync for better perf

Fix a bug in spec, the messages should be empty array instead of
empty string when disable it.