changed ArrayList to List<Socket>, removed redundant HashSet.Contains

- better performance for List<Socket> over ArrayList
- HashSet.Add does nothing if item is already in HashSet (not like
Dictionary where ArgumentException is thrown)
Poller should be background thread, otherwise it prevents application from shutting down

Poller consistently prevented application from exiting (Poller.Stop
didn't help)
Merge pull request #107 from hanswolff/master

changed ArrayList to List<Socket>, removed redundant HashSet.Contains