Remove contention on signature cache during block validation
Since block validation happens in parallel, multiple threads may be
accessing the signature cache simultaneously. To prevent contention:
- Turn the signature cache lock into a shared mutex
- Make reading from the cache only acquire a shared lock
- Let block validations not store their results in the cache