Uncomplete doucment.

ai_think:
* Checks if this is the first move, if it is, just places a move in the middle.
* Otherwise, it creates a thinkmap and the threats database, and calls
  move_find_best.

ai_think_map_create:
* Calls ai_think_map_update for each piece on the board.

ai_think_map_update:
* Updates the directional think maps and absouloute think map, according to
  coordinate of move specified.  If not called from ai_think_map_create,
  handles update a bit differently, to fix the thinkmap to be symmetric.


The immediate threat algorithm just builds a database of threats in the
following method:
- For each empty square (threatning coordinate), for each direction, for each
  line of 5 in direction that empty square is part of, need to check if pattern
  of 3 pieces + 1 space (blocking coordinate) is found in the 4 squares that
  are not the empty square.  Increase threat_count of that square, and store
  the coordinates of blocking coordinate/threatning coordinate in the database,
  for that threat.
  Multiple instances of the same threat should not be found
  (i.e not: OXXX44XXXO, but OXXX11XXXO):
  If the same blocking coordinate is found for more than one threat, only one
  threat is stored.

When a threat_count of 2 or more is reached, it means that an attacker who
places a move in that square would win (saves some recursion levels).
The defender's move however, is limited to a choice between all his threats,
and the squares who are shared by all threats of that square (blocks).

A move placed in a square of a threat, removes that threat from the database,
and decreases all the relevant threat_count's.

---X--XXX--
   X*-XXX   +1
    *-XXX   +1
--XXX--
threat_counts:
12XXX21

Threats in database:
Threat 0
Empty Squares = {0,0}, {0,1}
