Asynchronously traverse tree of mixed promises and values