Prevent AddListener from adding the same delegate

We found that ensuring that delegate instances are unique was a good way
to prevent odd, difficult to detect behavior.  This behavior is present
to some extent in BaseSignal, so it seems to make sense to add it to
Signal's implementation as well.
AddOnce and AddListener both only add uniquely

AddOnce and AddListener both add uniquely.  Adding some tests for
coverage.
Merge pull request #102 from bejeweledpair/master

Prevent AddListener from adding the same delegate