Extend upgrade

The extend function has been outfitted to work similarly to the jquery `extend` function (`deep` param can be passed in first).  Also the boolean for controlling the `useLegacyGettersAndSetters` could be passed in as the last parameter but is only triggered if `deep` is false.