Tweaked PropertyCollectionLib.

There are now 2 groups of the collectProperties methods:

1. Convenience methods for single-root traversal. This is a short-hand
way of using the more general method.
2. The general methods, where the full PropertySpecFilterBuilder Closure
is built, or passed through from outside. These methods are for
traversing from multiple roots.

Examples of 1:

```groovy
// Assuming ServiceInstance already exists.
SelectionSpec[] selectionSpec = PropertyCollectorUtil.buildFullTraversalV4()
List<Datacenter> dcs = grailsViJavaUtils.searchManagedEntities(si, 'Datacenter')
List<ObjectContent> results

results = propertyCollectionLib.collectProperties(dcs[0], selectionSpec) {
    virtualMachine('name')
}

// or

results = propertyCollectionLib.collectProperties(
    dcs[0],
    selectionSpec,
    VirtualMachine: ['name'])
```

Examples of 2:

```groovy
// Assuming ServiceInstance already exists.
SelectionSpec[] selectionSpec = PropertyCollectorUtil.buildFullTraversalV4()
List<Datacenter> dcs = grailsViJavaUtils.searchManagedEntities(si, 'Datacenter')
List<ObjectContent> results

results = propertyCollectionLib.collectProperties(serviceInstance) {
    dcs.each { dc ->
        addPropertyFilterSpec(dc, selectionSpec) {
            virtualMachine('name')
        }
    }
}
```