Reinstate `ttlHashSet.Exists()`

It makes the tests more readable and it's useful in the context of this
generic and reusable package.
Rename `val` to `crawlCount`

To make it more obvious what this variable stores.
Defer mutex unlock until function returns

`defer` on `t.mutex.Unlock()` so that the mutex is unlocked whenever
the `*TTLHashSet.Incr()` function returns.

This ensures that the mutex is always unlocked when this function
returns. Previously an error may have caused the function to return but
left the mutex locked, causing other goroutines to block.