Thanks, that improved things a bit!

I ran into trouble with a similar approach before because I was still trying to use `&self` and `&mut self`, but by rewriting the methods to all use `self` I am indeed able to bring down the number of of impls down to three, one for each trait.

I'll make a commit to update the PR with this approach