Allow (nearly all) in-place calculations, update tests, cleanup

@astrofrog - see comments on main thread. 

One tiny one here: the change for `def copy` is because as written, `copy` did not work on scalar Quantities, and this broke things. Also, since instantiating from a Quantity is guaranteed to copy the values, there was no need for the `self.values.copy()` in the first place.