ReadOnlyLists wrap existing lists as opposed to returning a copy. Changed code to return a copy of the list instead. Otherwise the ReadOnlyList would change over time and you should only receive/use the data that's there at the point in time you're requesting it. Not what changes later.
Extracted the Evaluate functions into superclasses and moved them into their own Eval projects.
Moved code related to the VarEnvironments around a bit. Have not yet been able to completely split it yet.
Added some tests for the bad forms described in: https://gist.github.com/tvdstorm/9651984