promise is already sealed, don’t bother proceeding.
although uncommon, denodeify should work in older browsers.
add JSON2
compatibility fixes