Bug #27, filter out sufficiently similar BSSIDs

This adds a filtering step to queries such that BSSIDs that are "similar enough" to each other get collapsed into clusters, and only a single element is chosen from each cluster.

Along the way I added a generic and more-robust (slower but more correct) clustering algorithm and rewrote the existing wifi-clustering operation done as part of position-estimation to use it.

A few tests which were feeding too-similar or invalid BSSIDs had to change but otherwise it seems to work.
Ah ok, I didn't know about this. I'll change this one and then make a separate PR switching the other doc comments I've written.