Built up pooling and base classes

A base object is created as a starting off point to create the
other object prototype objects. It essentially wraps Object.create
with a method to take properties passed in and add them to the
created object.

Pooling still needs some work but was taking from the master
branch.