set singularity.py as the new launcher

Shell scripts are no longer necessary to run the game. Adjust README.txt
accordingly, and also fix setup.py to properly handle OS-dependent imports
fix french translation hotkeys
add new internationalization (i18n) engine

Read files in data/messages_ll_CC.po and populate a new global messages dict

i18n of strings in code is done using GNU gettext's approach of enclosing
translatable strings with a _('...') function. The PO files containing
translations uses gettext's format, but unlike gettext they are directly
read from plain text using polib library, so no compilation to MO files is
required. POT files can be genereated using xgettext and its sibling tools.

_() uses the format() function for interpolation, so translatable strings
can use use its syntax and pass aditional positional or keywords arguments
as in _('{0} {1}', arg1, arg2) or _('{var1} {var2}', var1=arg1, var2=arg2)
Traditional interpolation via _('%s %s' % (var1,var2)) works, but is not
recommended since arguments are evaluated before _() is called, so any
syntax errors in translated string will not be handled.

A current limitation is that most UI elements are only translated at
import time, so a restart is required for language changes to be fully
effective. Restart will be properly handled in the future in the Options
screen.

Existing translation data files for techs, events, etc are still used,
including strings_ll_CC.dat. But now the loading order is: first the
default language (currently en_US), then ll (language with no country
code), then ll_CC (full locale spec). A major step for supporting
"generic" languages and data files like es, en, pt, etc.
add new hotkey engine

For button hotkeys, embed the hotkey in the translatable string itself
using an & marker, and replace hotkey='x' for autohotkey=True, as in this
example: button.Button(... , text=_("FINANC&E"), autohotkey=True, ...)

A helper function used by Button class scans the translated string (which
will hopefully also contain an & marker, as in "&VOLTAR"), strips the text
of the & marker (for the label) and assigns the marked character as the
button's hotkey. Old usage of manually assigning hotkey="char" in button
definition still works, and will override autohotkey=True.

While Button class automatically handles hotkeys, g.hotkey(string)
function can be used anywhere else. It returns a dict with several info
about text and hotkeys (like char, position, stripped text, etc). More
details in source code docstring.

Note that this engine is technically independent of i18n: _() itself is
completely unaware of embedded hotkeys. For _(), "&BACK" is a string like
any other: it searches the PO file for this entry and returns the matching
string.

As with i18n, a current limitations is that location hotkeys don't work
properly when language is changed on the fly. This was always a bug, but
now it is much more evident,
small fixes, code cleanup and documentation
reorganize utils/ dir
internationalize all game screens

Make each and every user-visible string of E:S be translatable using the
new i18n approach PO files

Also clean up unused code and small fixes in several modules
add new tool: util/gettext-singularity, customized gettext tools wrapper

Allow the creation and maintence of translation files, customized
for E:S. It automatically the following GNU's gettext tools:
- xgettext : to create or update data/messages.pot template
- msgmerge : to update existing data/messages_ll_CC.po files
- msgfmt   : to check existing PO files for syntax errors
- msginit  : to create a new data/messages_ll_CC.po file

For new files, also ask user the name of the language in native language
(eg, "Português Brasileiro" for pt_BR). This information can be used in
the future in Options Screen

execute util/gettext-singularity --help for more info.
add new tool: languages.py, to generate and store languages names

Try to read language names (in both English and Native language) from
several Locale info sources, like babel or PyICU. Also merge this info
with translation PO files headers, and save it in a pickle file in
data/languages.dat, which can be later used by Options Screen to present
each one of the available languages in their own native language.
revamp options screen

Major changes:
- add more resolutions, including widescreen ones
- drop sound buffer options
- display language names instead of locale codes

Sound buffer size can still be set via command-line options, and it will
still be saved to preferences file if user enter option screen and
save prefereces to disk

Resolution buttons' font is also a bit larger. Apply button was dropped

There is now a list of available resolutions in code.graphics.g, as well
as a default_screen_size, so both no longer need to be hardcoded. Options
screen and command-line options were adjusted to make use of them

Language names in the available languages selection list are presented
in native language, if possible, or in English. Names are read from
the data/languages.dat pickle file created by tools/languages.py

TODO list in headers was updated
update Brazilian Portuguese (pt_BR) translation

Add new messages_pt_BR.po translation file and review old-style *.dat
translations

Also update languages data file based on po file header
Use XDG_CONFIG_DIR/singularity for preferences dir

Make E:S compliant to the XDG Base Directory Specification, helping
unclutter the user's $HOME of dotfiles/dirs. Also change default dir name
from "endgame" to "singularity", to be uniform with game's package name
in Arch, Debian, Ubuntu (and also with game's launcher, singularity.py)

This is backwards-compatible with previous releases: if ~/.endgame is found,
it is used. The new default is, for most scenarios, ~/.config/singularity
Use XDG_DATA_HOME/singularity/music as an additional source for music

It is only created if XDG_DATA_HOME exists. If so, /music in preferences
dir, if it does not already exists, is created as a symlink.

In most systems this defaults to ~/.local/share/singularity/music
add first diagrams
add bash classparser
add classdiagram
add project.walk_modules_by_path
add_modules_by_path() in Node
move diagrams to their own dir
modularize code