This is the last abstract class before the implementation of the concrete Grid classes.
Normalization was added to dataframe mixin.
One unique class for all neighborhood types. The type is specified at the start (easier to work with than having multiple classes).
The neighbors are found by considering the agents in the neighborhood, not the distances between agents. Need to evaluate which is faster and whether to create a conditional implementation (eg distances with a few agents and neighborhood with many agents)
This is the last abstract class before the implementation of the concrete Grid classes.