Added some magic for handling promise-returning and callback-argumented elegantly