Topic/performance and expressiveness

A number of slight and not-so-slight fine-tunings. Some are performance:

 * use `'\n'` instead of `std::endl`. If we don't want to force a flush it's better not to, for performance.
 * `std::move()` in initialization lists. In the case of rvalues passed at the call-site this leaves the compiler an opportunity to sidestep a copy.

Some are expressiveness-related:
 * missing includes. I think it's better to be explicit about the includes: if we use something, include where it's at.
 * `s/size() > 0/! empty()/`

And one commit for idiomatic code: if a member of a copiable object is `const` then the object is not assignable. I think that usually (barring ... cases I can't think of off the top of my head) copying and assigning go together: when one is allowed so should the other be.