Modify L.DivIcon so that the html option can be either a string OR a HTML Node

I modified L.DivIcon so that the `html` parameter passed in the `options` object can be either a string or an HTML object.  This is purely for the convenience of application + plugin developers.  For example:

```javascript
var icon, marker;
....
this._textarea = L.DomUtil.create('textarea', 'sample-application-textarea'),
icon = new L.DivIcon({ html: textarea });
marker = new L.Marker(L.latLng(10, 10), { icon: icon });
...
```
This will make it more convenient for plugin developers to store a reference to the DOM node that is being set as the icon.  This pull request also sets a `_container` property on the `DivIcon`, making it easier for plugin developers to access the `<div>` container holding the icon's HTML.

I modeled this on [`L.Popup#_updateContent`](https://github.com/Leaflet/Leaflet/blob/master/src/layer/Popup.js#L171), since popups already exhibit similar overloading (they accept either a string or an HTML element).

I also added a test in `/spec/suites/layer/marker/DivIconSpec.js`.
Any particular reason you chose to put this in it's own function?