add new Attribute type and makeAttribute contructor. Change the first ar...

...gument of makeElement to Text instead of Builder, this reduces repetitive code in Html5 and Bootstrap.

This commit changes the signatures of `with` and `makeElement` so I'm open to discussion if you think there's any issues :)

I think hiding attributes behind a opaque type (perhaps Attribute should be a newtype?) is a good idea because users should use `makeAttribute` to create new attributes and shouldn't rely on the knowledge that it's (currently) a tuple. That way the implementation of Attribute can change without affecting user code.