Added support for LOCATE operation

You're right, it isn't clear off the bat what the input for the factory should be. The issue is that the `AttributeFactory` obscures and wraps the interface of the `AttributeValueFactory`. What you end up doing here is passing a `Name` object to the `AttributeValueFactory`, which extracts the `name_value` and `name_type` and then builds a new `Name` object with those values. It's redundant, but the way the factories are nested doesn't give you an option to just pass in the `Name` object directly.

I'm ok with this for now but I will probably end up refactoring how these factories work in the future.