remove Q dependency, add a native promise implementation