Swapping out a "copy on write map" for ConcurrentHashMap.

The previous implementation had code that turned a HashMap into,
essentially, a copy-on-write map that locked around the EpidemicServer.class
object when it was going to do a replacement.

I've replaced that code with a ConcurrentMap, using putIfAbsent to clarify the
logic somewhat.
Using a CopyOnWriteArraySet instead of an AtomicReference<Set> that retries while copying.
Merge branch 'master' of github.com:dclements/revori into protocol_hashmap
Merge pull request #43 from dclements/protocol_hashmap

Swapping out a "copy on write map" for ConcurrentHashMap.