Expression caching

improved version of #9006 (which was an improved version of #8942)
This line got duplicated in the merge. I had to move it up to the top since `$watchCollectionInterceptor` gets passed to `$parse` before this line executes.