Remove all pass-by and return-by-reference

Because smart pointers don't need to do that (and shouldn't, apparently)