Refactored render tree implementation

I refactored the rendering graphs to encapsulate more of the behavior
and variables that were previously implemented in class Global and
function display().

I also created a custom class to hold child nodes, since I found that
using std::vector was much slower than the previous sibling pointer
implementation. Iterators had too much overhead, especially given that I
do not implement visibility culling. My refactored implementation is as
fast as the sibling pointer method used prior. Changing to child lists
also reduced the function call stack, and allowed me to simplify the
draw() and animate() APIs.

I also implemented an EnvironmentNode class to encapsulate sub-trees
with separate lighting and shader conditions. There is currently an
incomplete implementation of shadow mapping inside their draw()
function.