Extract i18n initialization into ui_i18n.c

This allows be more explicit about language fallback
route, and change it per-language.

Localized strings are now accessed via a function call,
instead of exposing a big string array.

This allows additional bounds check with a visible canary
value, and further abstracts i18n implementation.
Italian translation: update
Merge pull request #433 from albel727/better-i18n-take-two

Better i18n take two
Merge pull request #436 from Ansa89/italian-translation

Italian translation: update
Add i18n text for various dropdowns
Add russian-localized text for dropdown menus
Move hardcoded dropdown menus from .h to .c
Rewrite dropdown menus with i18n support

DROPDOWN struct is generalized by introducing
ondisplay() callback for fetching menu item strings,
making onselect() accept simple menu index
instead of a handle (it almost always coincided anyway),
and adding a userdata field.

Two out-of-the-box DROPDOWN varieties are provided.

Simple dropdown treats userdata as array of
UI_STRING_IDs to be displayed.

List dropdown treats userdata as array of DROP_ELEMENTs,
and there are helper functions for adding and deleting them.

All of previously existing dropdowns are replaced with
one of them, except dropdown_language, which is now
autogenerated to contain all existing languages,
instead of being hardcoded.