Add license and related information
Refactor: data reading method

Current method is to append all data to a Python list then cast the list to
a Numpy array. This is prohibitively slow because we are keeping a handle
on all the data while reading the data file, not to mention the wasted
memory, memory I/O, and memory swapping using the `append` method.

New method: we iterate over the file once to get a size of the file, create
the Numpy arrays with the correct size (to avoid having to resize) and
then read all the data (iterating over the file again) into the memory maps
directly. Instead of using `append`, we do in-place insertion using `[i]`.
Merge branch 'add_license'
Refactor: get_particles_in_grid: use numpy methods

Grid sieving code is really slow. 20 seconds for 20k?!

Using Numpy's `where` and `intersect1d` methods, however, greatly improve
the performance of this function. 20k is divided in < 1 second (~0.3s).

Remove: get_particles_in_grid_np: this method is a relic of the earlier
methods.