Uniform Cost Search

* Uniform cost search implemented (like BreadthFirstSearch but with a heap and updating f(n) for each node in the tree).
* Added rule to SearchAgent constructor to recognize the string "ucs" for UniformCostSearch
* Added parameter "max_reward" (the C parameter) to the agent settings in Defaults.cpp
* Added attribute fn (the evaluation function) to class TreeNode
* Added rule in src/agents/module.mk
* Modified evaluate_agents.py to take into account the new algorithm
Blank spaces
Pivoting IW(1) search

* Added the idea of pivoting over states which have collected some reward. The grounds for this are
  a bit shaky unless we take into account the discount factor.
* Added the parameter "iw1_stop_on_first_reward" in Defaults.cpp - when set to false, it disables
  the "pivoting" in IW1Search.
* Discount factor set to 0.95 - using a discount factor of 1.0 makes no sense at all!!!