use assertSame instead of assertEquals

Any two closures are falsely said to be "equal" by phpunit.
See https://gist.github.com/edvakf/6971606
add test for getMethod called before addMethod
add test for controversial cases

- addMethod can be called twice
- removeMethod can be called before addMethod

these behaviors may not be clearly defined