Use structs instead of enums for the attribute, relationship, fetched properties and user info keys

At present, accessing the enum-provided attribute values looks like:

```swift
var attributeNameKey =  MyClassAttributes.attributeName.toRaw()
```

This PR replaced the enums with structs to allow:

```swift
var attributeNameKey = MyClass.Attributes.attributeName
```

Personally, I think this is a bit simpler, and the structs being namespaced to the MO subclass is nice.