Added Critical Sections

Thought there may be a timing issue so added Critical Sections, but the
update thread is separate from the rendering thread, and the rendering
thread is just reading the data, so what's the point of it?
Still have the corner case where a cluster loses all it's associated
datapoints, and still have the bug somewhere in computing centroids
where points positions and colors don't seem to match.