Factor functionality into separate files

Start refactoring the main lists.cpp file into more focussed components.

The main program is growing in functionality and it becomes difficult
to find and track the code responsible for any given functionality.
Separating out more focussed components will give an opportunity to
better document contracts in headers, and gain a higher-level view
of the code.

This initial refactoring is a little coarse, as it is based on the
existing code dependencies, rather than a real factoring of concerns,
but it does give a good first cut that can be refined.
factor out document formatting functions

Create a new file for 'report generation' that manages all the
functions reposnible for preparing and writing the various
documents supported by the issues list software.  The next
step is to make these methods of a report_generator object
that can store persistent info like the various databases
that we have loaded into memory, rather than passing them
as parameters to each call.

We also want to switch to writing to a stream, rather than
depending on <fstream> as an implementation detail inside
the class.

Finally, note that this change-set conflates a switch
from 'std::pair' to 'std::tuple' for nothing other
than didactic purposes.  I have a preference to act
as if 'pair' never existed and use the more general
'tuple' in code susceptible to frequnet change.
Extract section number wrapper-type

The section-number is another independant piece useed to assemble the
LWG documents.  In this case, a section number is the numbered clause
in the relevant document, and a named reference to that document,
where an empty string implies the main standard itself.

This extraction leaves the main 'lists.cpp' file small enough that
we can finally remove the 'using namespace lwg' and be explicit
about the types and functions specific to the issues list software.
cleanup and documentation

THe main effect of this change set is to start documenting the
various public APIs.  Some simple refactorings are applied to
simplify or clarify the documentation, mostly renamings.
Finally factor out the state in the report generator

This restores the original state of the report generator functions which
used global state to represent stable configuration information.  That
info is now part of the state of the report generator object, so does
not need to be passed repeatedly into every function call.
Quick fix for reference initialization

Vrace initializers cannot be used for initialization of reference
data members, as reported by gcc 4.9.
Defer requirement for C++14

This one small library addition is not worth pushing the C++14 requirements
yet, especially as the standard is yet to be ratified.  Leave the migration
path as a hint in the code for when we are ready though.
Update build scripts
Merge latest changes from master

This resolves the issues of building with g++ 4.9 while also supporting
32-bit builds on earlier gccs.