fix(groupBy): preserve groups in order of appearance

I've encountered a use-case, when the groups order is important.
To solve it, groups now are saved in array and user can set its order by adding `orderBy` filter to repeat attribute. Example:

```html
<ui-select ng-model="version">
    <ui-select-match placeholder="Select version...">{{$select.selected.title}}</ui-select-match>
    <ui-select-choices group-by="getVersionLabel" repeat="item in versions | orderBy:getVersionOrder">
        {{item.title}}
    </ui-select-choices>
</ui-select>
```

You can see in the changes in the tests, how it is affect current behaviour. I think, that groups are now aligned in correct order (Foo, bar, Baz), it's a good change.