Switch to defineProperty; set enumerable flags to be consistent with private/public properties

__defineGetter and company are deprecated; this switches completely to defineProperty, and uses the enumerable flag to fix #722.

I've tested in Firefox, Chrome, and Safari.  It still needs testing in IE and mobile browsers.