Reduce memory consumption of HSP by ~4.5x

Closes #2.

Before this commit, each node was storing
- 1 parent idx,
- 8 children idx,
- 1 bit for signaling if the memory position was free,
- and the cell ids.

The children were stored contiguously in memory (i.e. in row-major order) to
lower the cache miss rate. This allows to compute the idx of any child from the
idx of the first child: child(nIdx,pos) = first_child(nIdx) + pos. That is,
storing one child idx for each node is enough (significantly lowering memory
consumption). If a node has no children, it stores an invalid value.

This scheme assumes that for each node memory is either reserved for all
children or for none. Most nodes have either all children or none, i.e. the
extra cost of storing dead children is negligible. Dead children are marked as
"free" memory using the signaling bit. The invariant of storing all children
contiguously in memory is still maintained because to refine a node, at least
n_c contiguously free nodes are required where n_c is the number of
children(4 in 2D, 8 in 3D).

Minor: this commit also enables fast-math in release mode, and improves the
configure and cleanup scripts as well as the readme.