CloudClode + Constraint enhancements

- new RelatedTo constraint
- new method to fetch collections from CloudCode functions
Thanks for adding this. I hadn't come across a case where I needed anything more than a string, so I didn't think to make the `CloudFunction` method generic.

But I think maybe instead of adding a new method, you should modify `CloudFunction`, because it's making the same call you make here. Also I'm not sure the `CloudFunctionResult<T>` class is necessary. 

I don't have access to a Windows machine right now, but I feel like we could do something like:
```
public ParseResult<T> CloudFunction<T>(string name, object data = null) where T : new()
{
    var resource = string.Format(ParseUrls.FUNCTION, name);

    var request = CreateRequest("POST", resource);
    request.AddBody(data ?? new {}); // need a blank body or the API borks

    var response = ExecuteAndValidate(request);

    var result = new ParseResult<T> { Exception = response.Exception };

    if (response.Exception == null)
    {
        var cloudFunctionResponse = new { result = new T() };  // cloud function responses are wrapped in "result" field
        try
        {
            result.Result = JsonConvert.DeserializeAnonymousType(response.Content, cloudFunctionResponse).result;
        }
        catch (Exception e)
        {
            result.Exception = new ParseException { Error = "Parse API succeeded, but deserialization failed. " + e.Message };
        }
    }

    return result;
}
```

Then the existing `CloudFunction` would be equivalent to `CouldFunction<string>`, and the new method you have here would be equivalent to `CloudFunction<List<T>>`.

Does that seem right? I'll try this out when I get home if you haven't yet