Memory tests

Memory  tests used to allocate a bunch of ``Atom``s and ``Structure``s and then deallocate them. It would check the amount memory used by the python interpreter, allocate a whole bunch of extra ``Atom``s and ``Structure``s and check memory usage again. These tests depend on the behavior of the interpreter and are relatively likely to fail.

The new tests check that ``Atom`` and ``Structure`` instances are tracked and that they disappear from the tracked objects when deleted. It also checks they are not listed  in ``gc.garbage``, e.g. objects that are unreachable but that the garbage collector does not know how to release.