Inventory and generic interactions

This patch series makes it very easy to create new dialog based interactions with blocks. It also converts the existing chest access to the new system. 

All interactions based on the new system will have the following features:
* If the interaction target has an inventory, shift click can be used to transfer items.
* When you move out of interaction range, the interaction stops and the open interaction screen closes
* The interaction hotkey E can be used to stop interacting. This also closes a dialog if there is one.
* Opening the inventory with hotkey I, will also abort the interaction.
* Interaction screens open immidatly even if there is network delay. The server validates afterwards if it was okay. In rare cases where that isn't the case the screen will close again.

Modules that added new chests that use the old mechanism need to perform the following adjustment to their entities:
```diff
-  "AccessInventoryAction": {},
+  "InteractionTarget": {},
+  "InteractionScreen": {
+    "screen": "engine:containerScreen"
+  },
```
The InteractionTarget component triggers the sending if interaction events and the setting of the interaction fields.The InteractionScreen behavior will show the specified dialog when the user starts interacting with it. Without any further system implementation the interaction features listed above will apply: So it's possible to add new dialogs without implementing any event processing system!

It should also be possible to extends the workstation module so that it makes use of the new interaction system. That way all workstation based modules would get interaction powered dialogs.

For more details please have a look at the commit messages, which often have more than one line.

Noteworthy other changes:
* The sound of actions is now also played without network delay
* Clients can see the damage done to doors.
* API wise it's now possible to react to closed screens via a new event.