Cleanup call async function

- Pass in the args and kwargs instead of referring
  to the outter scopes variables.
- Make the callback object as a local variable with a
  type instead of doing it inline.
Add create_async tests

Add some tests the ensure the async functionality
is working as expected, starting the testing of the
create_async method.