Refactors dicts to mimic python behavior

This changes the behavior of dicts to mimic python's behavior. Dicts now have their own data array consisting of key/value pairs. Objects are added to an index based on a hash value, and the array will grow when it is 75% full. Items are deleted by replacing them with a dummy object. This results in significantly faster look-ups, and also adds meaning to the hash function.

Unfortunately, a lot of existing code was coupled with the previous implementation, so the risk of introducing bugs is high. This is exasperated by the fact that I can't seem to get the unit test suite to run properly on my local machine, so there will likely be some clean-up / additional bug fixing required after merging this.