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
Re-deprecated 'webui_hostname' as optional (from required).

We still need to set the 'webui_hostname' field for now in order for
interoperating with code that expects it to be required (e.g., a slave
on an older release). After another deprecation cycle we can either
remove this field entirely or just keep it around as an artifact so
that we don't reuse the ID.

Review: https://reviews.apache.org/r/15214