Added support for async command line

Currently the `OnExecute` command only accepts `Action<int>` delegates, which means we're right back to normal (non K) cmd applications if we want to do something async. This results in workarounds like creating an async method that is the actual "juice" of the cmd, and having simple `OnExecute(() => CallMyAsyncMethod().Result)`. Part of the beauty of K was the small things, like support for async main methods etc. and I think this should extend to the `CommandLineUtils` as well.

So here is a simple wrapper that takes a `Func<Task<int>>` and just does the result-trick explained above. This allows for usage as seen in the added test.
Can you verify that the `AggregateException` contains one inner exception, and that the inner exception is indeed the `InvalidOperationException` with the correct error message? I think this is important in order to ensure that the *correct* exception was ultimately thrown (as opposed to some other random exception that happened to also get wrapped in a lovely `AggregateException`).