Implemented support for multiple users and fixed broken tests

If by all means we are going to use `GetPropertyAsArray` and `GetProperty` methods then I'd say we revise the type of `Properties` member. I have couple of thoughts here's one of them
```csharp
public Dictionary<Property, object> Properties { get; private set; }

public void SetProperty(string key, object value)
{
    Properties[key] = value;
}

public T GetProperty<T>(string key)
{
    // if key exists do this:
    return (T)Properties[key];
}
```