Lots of bugfixes and some changes, see details

* getThreat() now returns max(threat - (units in calling node)(initial
range), 0).
* outputs to an excel spreadsheet now! this took so fucking long you
don't even know holy shit. don't ask for google docs integration please,
it'd take a lot more shit that i don't even want to think about.
- this has one bug i can't fix: it'll error out if you have the
spreadsheet open when it tries to record data to it. so close it out
between runs.
* added WallPlayer. exactly like BalancedPlayer except that when placing
units only tries to average out nodes adjacent to enemy nodes.
* i think i changed the player telemetry stuff to a hash table? it took
a lot of work so i'm just gonna say it was worth it so i don't deflate.
* when outputting player data into the console and the spreadsheet the
game sorts them in alphabetical order so that the data comes in the same
order each time.
* getAdj() now returns a deep copy of the nodes adjacent to a node
instead of the arraylist itself, so it's no longer possible to
accidentally modify it.
* changed default player range to 2. i ran 10,000 games under ranges 1-5
and at range 2 the BalancedPlayer won ~62% of games instead of ~98%, so
i'd say it's the most effective choice.
* maybe some other stuff, i think that's all the important bits though.