Fix AttributeKey object sets on new AttributeValue

When a new `AttributeValue` is created as opposed to getting and
returning a previously set `CollectionAttributeValue`,
`UserAttributeValue` or `FileAttributeValue` an `AttributeValue` is
returned instead of the more specific inherited class.

This is inconsistant as both the create and retrieve should return the
same class.

This also fixes the `UserInfo`, `File` and `Collection` objects not
being set on new `AttributeValue`s but is set on retrieved ones.

- Add `CollectionAttributeValue::getCollection()`
- Add `UserAttributeValue::getUser()`
- Add `FileAttributeValue::getFile()`
- Set newly created `AttributeValue`s to more specific inherited class
- Set appropriate object on specific `AttributeValue`s