Reduce overdraw by hashing points.

This pull request reduces memory consumption on visualization of very large models by reducing the number of stored points and normals. ASM sends triangulated meshes that have duplicate face vertex coordinates and normals. This improvement hashes the location and normal of a vertex and does a lookup before storing if another vertex has the same location and normal.

@pboyer ptal.
Yeah, doing some sort of canonical conversion, like you describe, would work and definitely be more performant than string comparison.

You said: "wouldn't it be nicer if we just compare the actual hash value of the new_point, given some acceptable tolerance value?"

I reacted negatively because tolerant comparison (i.e. abs(a-b) < tol) is not transitive.  For example, say we have 3 floating point values - (A,B,C) = (0.999, 1.000, 1.001).

If we compare them in a tolerant fashion, we would get A=B, B=C, A /= C.  This violates transitivity and can't be applied to GetHashCode.

Yes, we could use the approach you describe, but I still have reservations which I've voiced elsewhere in this PR.