Refactored Future to use shared_ptr.

Replaced manual reference counting with shared_ptr in Future. This
allows us to kill some nasty copy and deallocation functions in Future
(e.g. cleanup, copy).

From: Jie Yu <yujie.jay@gmail.com>
Review: https://reviews.apache.org/r/13602
Create Latch in Future Lazily.

No need to create a latch if we don't call Future.await(). Given that
Future.await() is rare in the code base, we should have a big
performance improvement. I am attaching the experiment results.

From: Jie Yu <yujie.jay@gmail.com>
Review: https://reviews.apache.org/r/15190