Rework the OO implementation in utils.lua

Super is now a static method instead of an instance-related one. Also,
there is a bottom class, called "object", that doesn't do much, but
allows for chaining the Unserialize calls through the inheritance list.

Conflicts:
	data/libs/Equipment.lua
Add missing import in Settings.lua
Return nil when querying an invalid translated string

An error isn't catchable, but you can test specifically for nil, which
comes in handy when writing generic code
Do not assume that pickle leaves the stack content intact

When iterating through a table, the pickler serializes the key and
value directly, assuming that the recursive calls won't replace the
values on the stack. This is WRONG, as it does replace the values in a
number of cases, for instance when serializing only part of an object.
The solution is to copy the things to get pickled before running the
recursion.
Support all sources of translations in EquipType

In order to do that, you just have to add a "l10n_resource" key in the
specs table, for instance (and by default if none is provided):

```lua
    l10n_resource = "core"
```

When the object is constructed, it loads up the resource and loads the
name and description using the l10n_key that should have been provided
alongside as before, and stores then in a subtable named volatile. This
table is discarded when serializing the object, and rebuilt when
deserializing, which allows for changing the language, or picking up new
translated strings.

For any complaints, please yell at @impaktor, he made me do it.
Merge branch '1719_is_back', #3279