Moved gfx driver declarations into separate headers
ALSoftwareGraphicsDriver must call UnInit in dtor

This fixes discrepancy between gfx driver shutdown processes, and moves certain software driver-specific code to ALSoftwareGraphicsDriver class implementation.
Tidying graphic filter classes

* Put filter classes into corresponding namespaces;
* Removed ScalingAllegroGfxFilter for being practically redundant;
* Improved relation between Allegro filter and its derivatives by providing PreRenderPass virtual function;
* Removed justCheckingForSetup parameter in filter initialization for being not used at all;
* Removed constants that duplicated existing GlobalFlipType enumeration;
* Renamed some function names to better reflect their meaning;
Graphics driver factory interface and implementations

Graphics driver factory provides means for creating and destroying graphics driver.
Graphics driver factory manages gfx filters

Driver factories now provide methods for enumerating graphics filters and assigning new filter to graphics driver.
The setting filter method is removed from driver interface, because every driver works with particular base filter class.
Incomplete OpenGL driver now has its own dummy filter class (that does nothing at the moment).
Moved mouse translation out of gfx filter class

This introduces helper Scaling class that performs translation between native game coordinates and actual screen. The graphics filter no longer manages coordinate translation, a global scaler is used instead; this helps to remove all references to graphics filter from general game code.
Graphics driver is set up with source and destination rectangles

This allows graphics driver to define source image scaling independently from graphics filter, therefore it is no longer restricted by filter multiplier. The scaling is set up explicitly, rather than calculated based on filter properties.

Additionally, picked out common members and operations into GraphicsDriverBase parent class.
Graphics filter is set up with source and destination rectangles

This allows graphics filter to define free source image scaling.
Direct3D driver properly implements source-to-destination rendering

This makes D3D driver to use viewport technique instead of manually "creating" black borders around scaled game rectangle.
Also adds support for separate horizontal and vertical scaling.
Engine: screen borders not handled by game drawing routine anymore

In the original AGS the black borders (for letterbox/pillarbox modes) were part of the game drawing routine. The scaling performed by graphic filters included scaling of black borders as well. When game dsplay size was calculated, borders were took into consideration as well.

This removes boxing borders from game business logic and lets the graphic driver handle them instead.

New game properties introduced are:
* GameSetupStructBase::size - defines native game size;
* ScreenResolution - defines actual display (window) resolution;
* GameState::viewport - defines room viewport, a size of playable area, which may not be larger than game size;
* GameState::native_size - defines game native size on low-res coordinates (for backwards-compatibility only)

For this commit following variables are replaced throughout the code:
* scrnwid and scrnhit - replaced by GameState::viewport;
* final_scrn_wid, final_scrn_hit, final_col_dep - replaced by GameState::viewport where they mean native game screen, and by ScreenResolution, where they mean display mode.
Engine: rewrote gfx mode initialization complying with free resolution

Introduced new configurable properties used to setup graphics mode.
 * Driver setting:
    * graphics / driver - driver id (renamed from misc / gfxdriver);
 * Size of actual screen resolution:
    * graphics / screen_def - sets how game determines screen resolution:
       may be "explicit", "scaling" (equal to scaled game) or "max" (equal to device/desktop size);
    * graphics / screen_width;
    * graphics / screen_height;
    * graphics / match_device_ratio - forces game to find nearest resolution matching current device/desktop ratio
 * Filter setting and scaling factors; may be defined in either uniform or distinct way:
    * graphics / filter - filter id (renamed from misc / gfxfilter);
    * graphics / filter_scaling;
    * graphics / filter_scaling_x;
    * graphics / filter_scaling_y;
 * Game frame placement;
    * graphics / game_frame - defines how game frame is positioned inside screen (window) after being scaled with filter:
       may be "offset", "center", "stretch" or "proportional".
Engine: removed obsolete code

This is made as a separate commit because git diff was messing new and removed code up to the point it was too difficult to understand how logic changed.
AGS.Native: updated to comply with recent engine changes
Engine: extended "--gfxfilter" command-line argument

This makes "--gfxfilter" argument take filter scaling as a second parameter.
Engine: limit game scaling with fixed filter scaling factor (if any)
Engine: corrected some default configuration values

The defaults for graphics mode is video mode keeping current display aspect ratio, standard scaling filter and centered game frame (even proportional stretch does not always look enough for some games, depending on display resolution, so we are leaving this up to user if he/she would want to stretch game to the window).
Engine: made mouse managing functions take game viewport into account

Although the display mode black borders are no longer part of the game business logic, there are still extra borders created by game for letterbox-by-design mode, and when the room is smaller than the game size. This commit makes mouse coordinate translation take extra viewport offset into account.
Script API: corrected System.ScreenWidth and ScreenHeight properties

It appears that in AGS these do not tell the real screen (window) size, but *unscaled* game frame size.
Engine: corrected Direct3D interface management
Windows: rewrote WinSetup

This completely replaces the old winsetup code with new cleaner one, with support for free display resolutions