fix(ngRepeat): ensure expected order of execution for directive lifecycle functions is maintained when they are nested along with ngRepeat

Request Type: bug

How to reproduce: http://plnkr.co/edit/k09gvqao2oHfIaQfktkd

Component(s): ngRepeat

Impact: small

Complexity: small

This issue is related to: 

**Detailed Description:**

When using directives that are sibblings with nested ngRepeat, their lifecycle functions are called out of order ('outer' ones are called before the 'inner' ones) e.g.:
```
<div foo ng-repeat="...">
  <div bar ng-repeat="..."></div>
<div>
```
results in the following call order:
```
foo.compile
bar.compile
foo.controller
foo.preLink
foo.postLink
bar.controller
bar.preLink
bar.postLink
```
when the expected would be:
```
foo.compile
bar.compile
foo.controller
foo.preLink
bar.controller
bar.preLink
bar.postLink
foo.postLink
```

**Other Comments:**

Ensure that lifecycle functions of directives are called in the expected
order (i.e. compile, controller, preLink, postLink) when using them along
ngRepeat on nested elements.

Previous to this change, lifecycle functions for 'outer' directives were
called before the ones for the 'inner' directives, when ngRepeat was used
on both the 'outer' and the 'inner' elements e.g.:
```
<div foo ng-repeat="...">
  <div bar ng-repeat="..."></div>
<div>
```
resulted in the following call order:
```
foo.compile
bar.compile
foo.controller
foo.preLink
foo.postLink
bar.controller
bar.preLink
bar.postLink
```
while after applying this change, the order will be:
```
foo.compile
bar.compile
foo.controller
foo.preLink
bar.controller
bar.preLink
bar.postLink
foo.postLink
```
Motivation for the change was a means to provide a communication channel
between parant and child directives where both need to be places as a
sibbling of ngRepeat.
we do have a caching strategy which mitigates this issue a bit, but I'd still prefer if we didn't use it for this case, since we don't need to