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.
Merge pull request #1 from jwakely/master

Replace reserved names, optimize a copy to a move, and fix the TODO about std::make_unique.