Refactor|World|Map Renderer: Switched all Mesh face iterations to use half-edges

There are very few situations where the clockwise ordering of edges
around a polygon is important outside of the map renderer. In nearly
all other situations one can simply iterate the half-edges of any
given Mesh without affecting the outcome.

Where possible we now iterate the mesh edge list instead of walking
the half-edge geometry as this allows for many of the algorithms to
use the same logic for all half-edges at a given BSP leaf (leaf and
extra meshes and polyobjs).

Now that we are starting to make proper use of the half-edge data
structure the clarity and uniformity it affords is more obvious.
Cleanup|Map Renderer: Combined writeLeafPolyobjs() into writeLeafWallSections()
Cleanup|Map Renderer: Minor rename refactorings for consistency
World|Map Renderer|Polyobj: Skip half-edges on the back of one-sided polyobj lines

When clipping lumobjs by sight and notifying geometry changes.
Fixed|libcommon: Player movement speed inconsistencies

* Hexen: speed boots do not provide an extra boost.
* All games: -turbo does not adjust max speed and potential max with
turbo is ~17% greater.
Refactor|libcommon: Renamed global var userGame as gameInProgress

Renamed to more accurately describe the purpose and meaning of this
variable (which changed slightly subtly since vanilla).
libcommon: Cleanup
Fixed|libcommon: Misinterpretation of -skill 0

The vanilla DOS DOOM executables fail to fully range check the -skill
command line option. Due to the mechanics of thing spawning this means
that a -skill value of zero results in no things being spawned.

This logical "spawn no things" skill mode is now fully supported in
all games.

The save format version was bumped (now at version 13) in order to
separate the "fast" game rule bit from the skill mode byte.
Refactor|libcommon: Command "setmap" is now an alias of "warp"

The former is no longer necessary as management of game sessions and
game state is now more logical (in particular the saved ACS state in
Hexen is now managed as part of the map change process once the game
session begins).

When executed on server-side a warp command now respects the current
value of "server-game-skill" when (implicitly) starting a new game
session.

This needs testing (all games, multiplayer map cycle, etc...).
Fixed|Server: Fatal error attempting to use "endgame" on the server

The server attempted to initiate a graphical confirmation dialog. As
this is not possible with a dedicated server we now assume the user
knows what they are doing and the game will end forthwith.
libcommon: Add comment in D_NetServerClose() wrt "restoring normal" game state
Multiplayer|libcommon: Force a new game session using "warp" in a networked game

In a networked game we must presently force a new game session when
a map change outside the normal progression occurs to allow session
level state changes to take effect. In single player this behavior
is not necessary.
libcommon: Cleanup
Refactor|Map Renderer|BspLeaf: Replaced the fake radio ShadowLink list with a QSet
Optimize|Map Loading|Sector: Utilize the BSP leaf blockmap when preparing sector reverb

When determining the BSP leafs which contribute to the environmental
audio characteristics of sectors the BSP leaf blockmap can be used to
accelerate the process (reducing the number of tests for bounding box
intersection).
Refactor|Server|Sector: Removed more unused logic and data from the server-side Sector
Sector|World|Client: Cleanup
Refactor|BspLeaf|Client: Moved BSP leaf audio environment calculations into BspLeaf

Each BSP leaf may contribute to the audio characteristics of several
sectors. Currently the audio environment properties of a BSP leaf are
repeatedly calculated each time an affected sector is updated.

Moving this logic into BspLeaf will potentially allow for efficiently
updating these values only when necessary.
BspLeaf|World|Client: Cleanup
Refactor|Sector|Client: Moved sector audio environment calculations into Sector