object functions can handle hasOwnProperty override

hmmm. do we want to enforce type if the user gets it wrong? everywhere else we just let it throw, e.g.

    foldl(100, 100, 100) // BOOM