Metadata tagging general tool AND csstag usecase 


### The purposes of this pull request (high priority first):

- provide a general API for metadata tagging linked with DOM class tagging
- specify an API for a particular usecase namely csstag
- a minimalist clean of create_element hierarchy, because I have needed it

### Details:

To provide an API in all kind of cell I've had to work in Cell class, but originatly, this class doesn't provide any DOM element, specificaly not the base div element of the cell. So I ve moved a bit the design of create element (produce no change at all in the DOM, at any stage).

Then, I code two general functions able to handle  synchrone metadata tag and class tag in DOM.

Eventually, I propose an API for class tagging, in order to perform notebook layout using only css selectors and class tagging. In my mind, there is only need to tag the base <div> of the cell, css selectors job is to track subelement and apply rules. 

This seems strange - tags can be either a string value with any key, or a string key with a boolean value. Why not just store them as an array:

```json
{"metadata": {
  "tags": ["foo", "bar"]
}}
```