more robust attributes

Hey, not sure if this is a good way to go about this, but I made attributes behavior a bit more consistant, and made the el.attributes accesor work (setting values of attributes from the returned list will also update the node as expected).  There are parts that are a bit janky because I didn't want to introduce properties onto elements that are not part of the dom spec.

I'd be interested in your feedback, even if this is not the direction you want to go.