Expected failures must have a call to fail(msg), + some clean up
HORNETQ-1202 Fix crash on concurrent modifications. Notice that just making 'matches' a ConcurrentHashMap does not solve it.

We could have a race between the state of matches and the cache:
Thread1: addMatch(): i. clean cache; ii. add match to Map
Thread2: could add an (outdated) entry to the cache between 'i. clean cache' and
'ii. add match to Map'.