fix to make the copy constructor public again. some compilers required it

Seems some compilers needed the copy constructor when doing assignment, as such I've swapped them over so the copy constructor is public and actually does the copy and the assignment operator uses the copy & swap method to avoid duplicated code.