Refactored Future<T>

Moved Future<T> back to Compute unit, but keeping implementation
separate. This is needed as we require access to the underlying event
object.