Changes VertexCacheVisitor block from private to protected for inheritance
Adds glesUtil::VertexCacheVisitor

The issue with osgUtil::VertexCacheVisitor is that it won't work if *any*
primitive is either not a surface or not indexed.
Optimizing cache is just about changing the order of primitives so it doesn't
matter that some primitives are not optimizable, they should just not be
optimized.
Fixes geometry splitting edge cases

* doSplit might produce a geometry with no primitive set that should be filtered
* if we run a post-transform optimization, it will filter degenerate faces;
  however the corresponding wire edges are not filtered. Hence `primitivesToFix`
  might be empty but we could still add the wireframe primitive so the reported
  geometry creation should not depend upon the existence of `primitiveToFix`
Adds post-transform before geometry splitting to improve locality
Adds StatLogger to time GLES optimization steps