Revert 5465fd8..0a761a3

This rolls back to commit 5465fd8364e3a940661212db4d7756fa753a0ee6.
Revert "Working on converting lots of varidic functions to templates"

This reverts commit 5465fd8364e3a940661212db4d7756fa753a0ee6.
Cap off reverts and implement explicit copy constructor, see extended description

Moving the functions into templates was the wrong way to go. It moved
too much code out of the object file and into the header.

I need to revisit these optimizations some time, but not right now.