Original Version - Copy & Paste

Refactoring Attempt #1 - Create object by passing in functions that take an object refererence

Refactoring Attempt #2 - Inheritance via Object.create

Refactoring Attempt #3 - Composition using a closure for the inner object