New, more encapsulated, list implementation.

The actual data structures are now hidden from the users, and there is an
explicit difference between a list head and a list item.  This reduces the
size of a list item to 2 pointers, but adds a 2 pointer overhead to the
list as a whole.

In addition the new list structures are optionally copy-on-write; the list
contains a reference count which is incremented whenever it is copied
(rather than actually creating a copy of the list).  When a modification
is made to a list the reference count is checked.  If the reference count
is greater than one then an actual copy of the list is created and the
modification is performed on the new copy, which is returned by the list
API call.

These two modifications significantly reduce jam memory usage for large
projects.  In our code build the reduction was from approximately 900MB to
500MB.
Rename NewList -> LIST and move back into lists.[ch].
Add some function descriptions to lists.h.
Reinstate L0 as an alias for the NULL list.

This reduces the surface area of the diff.
Merge branch 'nextgen' into newlist
Merge remote-tracking branch 'thomasspurden/newlist' into nextgen
Samples: Add newplatforms sample illustrating two win32-derived platforms
Tests: Fix generate_libs generation for JamPlus netgen
Documentation: Update the bootstrapping docs
Tests: Add newlist timings to generate_libs