Implement Config:addSection() to use for default settings

The constructor for the Config class sets defaults for key-bindings
but then also creates aliases so that we do not expose the ‘section’
member of the class.  This patch provides a method we can use to
create those bindings that does a better job of hiding that property,
which we do not care to expose to the public API, while also allowing
us to get rid of the aliases we had to create.
Remove mention of 800x600 as the default resolution

We have switched to a higher default resolution and we may change it
again in the future so we should change the commentary to mention the
variables that contain those defaults instead of the actual default
values, that way the comments will not fall out of date.
Add ‘Graphics’ to the default configuration with screen resolution

This patch adds a ‘Graphics’ section to the default configuration file
that has values for the width and height of the screen resolution we
want to use.  All this does is add the values; it does not change the
game to read from them or use them in any way.
Create a config file for the player if it does not exist

When we start the game we create the PlayerConfig global, which reads
from the ‘default.ini’ file.  However, that file may not exist.  This
patch adds a test to see if it does.  If not found then we create the
file and save it, using a new constant to avoid repeating the
filename.
Fix a bug with accessing configuration sections

We store all of the player configuration values in the ‘sections’
table of a Config object.  But we do not want to expose the
considered-private-API ‘sections’ to any other parts of the program.
So what we used to do is create public aliases.  For example, we would
access the ‘Config.sections.Controls’ table via ‘Config.Controls’.

When we switched to using Config:addSection() we left out the code to
create these aliases, which the rest of the game still relies on.
This patch reintroduces those aliases.

With this patch in place access to ‘PlayerConfig’ values no longer
crashes the game.
Update the player config file when changing screen resolution options

This patch modifies the options menu so that when the player changes
his resolution it saves the appropriate width and height to the
‘PlayerConfig’ object.  We then tell the engine to run that object’s
save() method when we leave the menu so that the newly selected
resolutions will appear in the configuration file.

However, this does not have the exact intended effect because the game
will still always default to 1920x1080.  That is because we do not
first attempt to read the resolution from the user’s configuration.
Use the player’s preferred resolution from their config file

This patch provides a large overhaul to the code that creates the
graphics resolution part of the options menu.  It places the options
and resolution information inside of a table that we then loop through
in order to both create the menu and also to decide which option the
player chooses.

The end result is that we cut down on the overall amount of code and
the game will use whatever resolution the player has selected when he
starts the game again.
Merge branch 'ejmr/resolution-configuration'

* ejmr/resolution-configuration:
  Use the player’s preferred resolution from their config file
  Update the player config file when changing screen resolution options
  Fix a bug with accessing configuration sections
  Create a config file for the player if it does not exist
  Add ‘Graphics’ to the default configuration with screen resolution
  Remove mention of 800x600 as the default resolution
  Implement Config:addSection() to use for default settings