Short and to the point
Why are you doing Object.prototype.hasOwnProperty.call(o,p) instead of a simple o.hasOwnProperty(p)? Is it just in case that method is overridden in o?
From memory o.hasOwnProperty(p) does not work correctly in IE < 9
I don't believe for in loops work in IE8, so while this should solve the issue theoretically, it may introduce another problem.