Avoid overwriting NameNodeMap methods with attribute values

I ran into a serialization error that could be boiled down to this:

```javascript
require('jsdom').jsdom('<li item="foo"></li>').outerHTML;
```

It fails with this error:

```
TypeError: Property 'item' of object #<Object> is not a function
    at Object.attributes (/home/andreas/work/jsdom/lib/jsdom/level1/core.js:1046:46)
    at Object.stringifyElement (/home/andreas/work/jsdom/lib/jsdom/browser/domtohtml.js:47:14)
    at generateHtmlRecursive (/home/andreas/work/jsdom/lib/jsdom/browser/domtohtml.js:112:29)
    at generateHtmlRecursive (/home/andreas/work/jsdom/lib/jsdom/browser/domtohtml.js:145:20)
    at exports.domToHtml (/home/andreas/work/jsdom/lib/jsdom/browser/domtohtml.js:172:12)
    at Object.outerHTML (/home/andreas/work/jsdom/lib/jsdom/browser/index.js:429:12)
    at Object.<anonymous> (/home/andreas/work/assetgraph/oops.js:2:47)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
```

I dug around a little and found that `NamedNodeMap.prototype.setNamedItems` will overwrite (or rather, shadow for) its own methods if an unfortunately named attribute (`exists`, `item`, `getItemName`, etc.) is set: https://github.com/tmpvar/jsdom/blob/0cf670d6ebb7772ac8535475d057108c65e4b9b9/lib/jsdom/level1/core.js#L909

Chrome avoids that by not having a "by name" property for these attributes (haven't tested other browsers):

```javascript
var div = document.createElement('div');
div.innerHTML = '<foo item="bar" quux="baz">';
console.log(div.firstChild.attributes.quux); // >quux="baz"
console.log(div.firstChild.attributes.item); // function item() { [native code] }
```

The enclosed patch checks whether a not-own property exists before setting the "by name" property.