zbuffer and shader changes

zbuffer changed to a nested structure, hopefully more efficient. Vertex
normal calculations moved in CanvasObject- shared facets that are highly
divergent removed from facet map and use the facet normal (not the
averaged value).
Changed getTriangleCentre to actually get the centre