Rewrite objects to allow for private methods and attributes

In this structure, private attributes and methods are still accessible by methods defined on the prototype as they are available in the closure