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`.
My original thinking was to make it easier for plugin developers to override / extend default functionality.  So a plugin developer could override `_updateHTMLContent` to add their own stuff to the `DivIcon`.  For example, an class extending `L.DivIcon` in which every icon has a caption (not a great example, but whatever...)

```javascript
...
_updateHTMLContent: function() {
    var caption = L.DomUtil.create('p');
    L.DivIcon.prototype._updateHTMLContent.call(this);
    this._container.append(caption);
}
...
```

I think it makes the code more readable.

Now that I'm looking back at this code, I remember that I was also thinking a few weeks ago that it would be really  nice if `L.DivIcon` could expose a `#setHTML` method, and `#_updateHTMLContent` would make that really easy:

Basically, `L.DivIcon#setHTML` could look like:
```javascript
...
setHTML: function(html) {
    this._innerHTML = (options.html !== false) ? options.html : '';
    this._updateHTMLContent();
}
...
```
Would this be a desirable addition?