Abstract over use of scala.util.Try

Custom implementation of the async macro may choose to use
a different data type to represent `Throwable | A`.