Cache locations for neighbours and incident edges.

This works by offering a dedicated cache location for
each individual set of tail/head neighbours.  The cost
is a greater memory footprint for an individual graph,
the benefit is that the cache is "safe" and reliable
(i.e. it won't overwrite another vertex's neighbours)
provided the graph itself is static (i.e. you don't
add more vertices or edges).

It could in principle be extended with a cache check
which notes if the cache needs to be updated, to save
the recalculation of the neighbours.

The lack of safety in the event of adding/removing
vertices and edges is an annoyance, and some thought
needs to be given to how to address this.
Note whether neighbour/incident edge list has been generated and cached.

This provides a minor speedup to performance as in the case of a static
graph the neighbour/edge values need only be generated once.
Use slices of cache for neighbour/incident edge storage & cacheing checks.
Merge branch 'master' into cache
Stylistic/optimization tweaks to foreach loops.
Merge improvements to betweenness centrality calculation from 'master'
Merge new template tests and generic code from 'master'.
Add new large-scale betweenness centrality calculation.

Confirms that cached Index Edge List performance is on
a par with (maybe even slightly better than!) igraph.
Tweak name of cached graph class: CachedEdgeList.
Re-implement CachedEdgeList as subtype of IndexedEdgeList from master.
CachedEdgeList should not duplicate IndexedEdgeList functionality.
Warning about access to CachedEdgeList._graph.
Ensure that neighbours and incident edges are random-access ranges.
Use writeable vertexCount @property to replace addVertices.
graphtest benchmarks all available graph types.
Ensure function attributes are as strict as possible.

  * Add @safe, const, nothrow and pure where possible

  * List attributes in alphabetical order
Manually wrap public methods of CachedEdgeList._graph
and make _graph private.

This is a stopgap solution to the problems caused by
http://d.puremagic.com/issues/show_bug.cgi?id=10996

It's preferable to the previous solution of making
_graph public, because it restricts access in the way
that is intended by the subtyping design.

It may add a small amount of latency to the function
calls, but not enough to worry about, and it ensures
that the public API of CachedEdgeList will remain
consistent and safe both now and after Issue #10996
is fixed.