Replace all reserved names.

Names beginning with __ or _[A-Z] are reserved for the implementation
and must not be used by user code.
Use std::move when returning sub-object.

Returning pair.second is not eligible for copy elision and will not
select a move constructor automatically.
Use std::make_unique when using C++14.