Refactor SnakObjectTest

Removes the strange inheritance and uses proper mocking instead.
> This "war against inheritance"

You mean the "quest for good design"? :D

> I find the "run abstract methods via a mock object that does some magic reflection" approach in this pull request very, very creepy.

> can't believe it's actually testing what needs to be tested

Read my first comment, I fully agree with this. That is not an argument for the code reuse via inheritance approach though.