Remove unneeded const on return types.
Move semantics for param at construction.

Also, fix inconsistency between const param and not const param in declaration and implementation.
Prefer type aliases to typedef.
#include ordering: local group first, then std group.  Alphabetical within group.