Add findProtection(location) which can be used to avoid precious getBlock() calls if the location is already in the cache
Potentially use one less findProtection call
simplify expression to xor (simpler to understand)
Some specific optimizations targeted at hoppers but should help all around as well. LWC startup may be a touch slower for now while more testing is done.

This commit makes LWC do the following:
- When all protections are in the cache don't even go through the protection matcher (skip it entirely)
- Match all blocks for precached protections on startup (makes the above op allowed)
When the cache is full don't bother trying to match any blocks. All precached blocks are matched on startup.
- Hardwires HOPPER to not use any block matchers (i.e. used when the cache is not full)

All of these together should significantly decrease the event time for InventoryMoveItemEvent. For example, it was >30,000 nanoseconds per event for my test server before (around 130 hoppers spamming items every tick) and is now around 2,000-2,500 nanoseconds per event while keeping the exact same functionality.

This commit *might* break things (e.g. LWC-Economy might break since LWC now loads postworld not on startup but from my testing it is OK). If your world doesn't explode in a ball of fire you should be alright.
Revert some changes done by commit 52be0009: precaching all blocks in multiblock protections

Closes #736, #735
Add a method counter which right now is just used for the cache in /lwc admin report to give a more detailed view of the cache, e.g.:

15:19:14 [INFO]  ==== Cache ====
15:19:14 [INFO]   Usage: 15.92%  ( 1592/10000 [10000+0] )
15:19:14 [INFO]   Profile:
15:19:14 [INFO]     isKnownNull: 645,738 (9496.15 / second)
15:19:14 [INFO]     getProtection: 228,874 (3365.79 / second)
15:19:14 [INFO]     addProtection: 1,592 (23.41 / second)
15:19:14 [INFO]     addKnownNull: 1,244 (18.29 / second)

This test world has a LOT of hoppers so the huge amount of reads is to be expected (each hopper is trying to poll an item every single tick but getting blocked by LWC)

#734
formatting
Restore /lwc admin view
The null cache doesn't need to be weak (the value is always strong ....) and also fix a minor math mix up
Hopper events only ever have 1 inventory to select from so instead of trying both source and dest use only the one that is not the hopper

For my test server this removed about 30% of the cache reads some may be more or less

Lastly, optimize flags a tiny bit and add a resolveProtectionConfiguration method to skip the getBlock call
The messy hopper protection stuff can be shifted back to the handleMoveItemEvent because it will only ever be called once per event now
More optimizations regarding hoppers. Mainly, only if hoppers aren't already protected then they a lookup should not even be tried
Fix NPE in Updater
Add second entity explode event that removes protections from blocks protected in an allowed explosion
Properly update cache when a chest is removed from a double chest configuration
Fix NPE in LWCBlockListener
 #742 Updated Danish translation from cannafix
Merge pull request #1 from Hidendra/master

Pull from source