ENH: implemented __deepcopy__, add/sub now return new class, fixes #6

I'd like another pair of eyes on this one before pulling it into the master. I tried a few different things, but it seems like `deepcopy` was the only reliable way to implement the original use case I wrote in issue #6.