Make Async utility use a cached thread pool

Instead of creating a new thread every time, the Async utility now uses
an executor service that is based on the cached thread pool settings
with the following minor modifications:

- Use a timeout of 5 minutes instead of 60 seconds
- Use a custom thread factory to set a meaningful name and mark the
thread daemon