Added: Garbage collector

The collector is thread-specific. Cleanup is automatic, but recycling must be
requested at regular intervals.
Garbage: Shutdown at thread exit and engine quit
Only run Sv_Ticker() with dedicated servers

Single-player code should never concern itself with server specific
code. We no longer have to support the "single-player server" mode
that was previously used for recording demos. In the future, demo
recording will work with the local dedicated server that also runs
single-player games (unified networking).
Recycle garbage in the main loop

Every iteration of the main loop begins with recycling old garbage.
Documentation: Improved apidoc for Garbage
Documentation: Fixed a bunch of Doxygen warnings
Documentation: Fixed a few more Doxygen warnings
Documentation: Fixed more Doxygen issues
Fixed|UI: Updating list widget visible items range

When resizing the UI, it would sometimes occur that the visible range
started at a too high index, causing the list thumb button to be drawn
in an incorrect position.
Added: Typedef for AutoStr

Just an alias for ddstring_t.
Merge remote-tracking branch 'origin/master' into autostr-and-garbage
ddstring to AutoStr conversion

Any ddstring_t instance not on the stack can be converted to an
AutoStr, after which it cannot be deleted manually any more. The
garbage collector will delete the AutoStr instance during the next
recycling.
Testing AutoStr in B_ParseDevice()
Input|Refactor: Perform mouse polling at a predictable point during the frame

The state of the mouse is now polled always at the same point in time
in relation to a frame update.

This ensures that the mouse information for each frame has been
acquired at the same point in time in relation to the update cycle
(providing the operating system provides high-precision mouse input).

Also cleans up the Canvas class slightly: trackMousePosition() is no
longer there and has been replaced with Qt-based mouse position
polling in mouse_qt.cpp.
Input|Fixed: Axis position filtering (especially mouse position)

Now correctly takes elapsed time into account when updating device axes.

Positions of relative filtered device axes are now updated differently:
1) dispatchEvents() will apply each delta event into the axis accumulation.
2) Afterwards, positions of filtered axes are determined based on the
   elapsed time.

Fixes a jittering artifact when turning with the mouse with mouse filtering
enabled.

If filtering is disabled, there is no way to avoid the jittering as mouse events
aren't restricted to sharp ticks, while PlayerThinkLookYaw is only updated
on sharp ticks.
Win32: Fixed build
Input: Sharp input applies to all input events (not just toggles)

Playsim uses sharp ticks to update view angles, so the mouse axis
position needs to be updated only at sharp ticks, if sharp events are
in use. Mouse filtering is now applied so that it takes the sharp
ticks into account.

The variable "input-sharp" replaces "input-toggle-sharp".

If mouse events were applied in fractional time, they would also
have to be applied to the view angles in fractional time.
Refactor: Switched win32 mouse module to C++
Refactor: Switched win32 joystick module to C++
Canvas: Cleanup; fixed move event tracking

Mouse_Poll() must do nothing when using Qt mouse events for
tracking cursor position.