KD-Tree and Ball tree added in a unified interface

- ball tree added
- kd tree added
- max heap data structure added for utility purposes
- both trees unified under common interface - ```NbodyTree```

I think it is a common practice to explicitly write virtual in the destructor of children classes, although it doesn't change anything since the destructor of the parent class is already virtual.