OLCTriangle: use a mixed breadth-first/depth-first search for large trees

This won't affect fast problems but can reduce the memory usage for hard
ones.

Experiments with worst-case flights with many gps fixes revealed a
saving of over 2/3 compared to the old strategy (450mb instead of 1.6gb
for a flight with 4096 points). Flights with less points don't have that
problem, due to a nonlinear dependency to flight size.
OLCTriangle: reduce memory footprint of CandidateSet

Saves about 10% memory...
MapDrawHelper: change ENABLE_SDL to USE_MEMORY_CANVAS
Event/Linux/Input: driver for Linux input devices
Screen: render to /dev/fb0 on the Kobo, without SDL
Screen/PixelOperations: use std::bit_and
Screen/PixelTraits: API documentation
Revert "DebugReplayIGC: fix midnight roll-over"

This reverts commit 339fbac01b7de6373e826b53c610611adabec9b1.
DebugReplayIGC: fix midnight roll-over, second try

The first one was fixing the FlightPath utility, but breaking AnalyseFlight.
This is working now as expected.
OLCTriangle.hpp: fix removing of element

std::map.erase returns the iterator to the next element while
invalidating the iterator itself. Using a for loop here would
skip that next element after removal.
Android release v6.7_preview11
resource.mk Fix misplaced endif
Geo/GeoClip: use common clipping routine

This code should be merged with RasterCanvas's clipping routine,
but for now, this commit just re-uses the same logic,
which is set up for a minimum number of comparisions.
Screen/Memory/RasterCanvas: don't do redundant clip tests

When we clip against a line, we know that that clipping condition is satisfied,
so only need to clear the clip flag (if we don't move the other dimension), or
recalculate the clip flag along the other dimension (if it has moved).
Geo/GeoClip: don't do redundant clip tests

When we clip against a line, we know that that clipping condition is satisfied,
so only need to recalculate the clip flag along the other dimension (since it may have moved).
Geo/GeoClip.cpp: cache clip status for polygon clipping

Use temporary objects to cache clipping status during polygon clipping,
to avoid performing 4x2 floating point comparisons per vertex.

These are effectively replaced by integer mask checks; but further
optimisation is possible.
build/targets.mk: NEON fpu specified twice.

-mfpu=neon -mfpu=vfpv3-d16 are conflicting.
One or the other, not both, should be specified.
Terrain/RasterRenderer.cpp: avoid branch on positive mag test.

Quicker to just set a bit, than have a branch (from use of std::max).
This means mag is slightly larger than it should be, but well and truly
acceptable given accuracy of the rest of the slope shader.
Screen/Custom/Dither: move to Screen/Memory/
Screen/Dither: include cleanup