updated function after behavior

this is a different implementation of function/after to make sure callback is executed once for each call and also make sure it's always executed asynchronously.

closes #139. see #138.