Add Promise.finally
Allow different promise resolver strategies

- use nextTick for promise resolution
Add Promise.done
Add functional methods to Promise

- forEach, collect, filter, map, flatMap and recover