Use default ops where appropriate
Note, several move constructors/operators were taking const T&& arguments, which are not called for when the argument is provided using std::move() (see point 8 here. for more details). Instead, the argument type should be T&&.
const T&&
std::move()
T&&
Fixes #146