Improved duplicate atom testing in `OBUnitCell::FillUnitCell`

Previous implementation was O(N^2), checking the distances of atom-atom
combinations. It regained speed by only checking atoms against their
symmetric counterparts.

This implementation is amortized O(N), using a hash function. It uses
the extra speed to check every atom-atom connection, which handles a
series of corner-case issues (e.g. input cif file having duplicate
atoms, mirrored symmetry expansions).

Note that this could be improved even further, but it would require
some heavier edits to openbabel. The best approach uses an octree, of
which there are existing implementations.