sets cannot be safely lazily initalised

This piece of code passes before this PR, it should not
```
func (stringSetSuite) TestSetAddByValueFails(c *gc.C) {
        var s set.Strings
        add := func(s set.Strings) {
                s.Add("foo")
                s.Add("bar")
        }
        add(s)
        c.Assert(s.Size(), gc.Equals, 0)
}
```
It is not possible to safely lazily initalise a `set.Strings` or `set.Tags` because they are usually as values, rather than pointers. So we have to prohibit this use.

The lazy initialisation behaviour is present in the maas provider. It isn't clear if that usage is a bug or not.