Add CSS transition support

Yes and no. It becomes async because the callback isn't invoked before the function returns, but it will still end up getting executed in the same event loop (Backburner always executes everything in the same thread unless you use something like `later`).