test(matchers): update toThrow matcher
feat(ngError): add error message compression and better error messages

- add toThrowNg matcher
feat($compile): support multi-element directive

By appending  directive-start and directive-end to a
directive it is now possible to have the directive
act on a group of elements.

It is now possible to iterate over multiple elements like so:

<table>
  <tr ng-repeat-start="item in list">I get repeated</tr>
  <tr ng-repeat-end>I also get repeated</tr>
</table>
feat($sce): New $sce service for Strict Contextual Escaping.

Strict Contextual Escaping (SCE) is a mode in which AngularJS requires
expressions used in priviliged contexts to be explicitly marked as safe.
By default, AngularJS ships with SCE enabled.

Examples of priviliged contexts include ng-include, ng-bind-html-unsafe,
ng-src for iframe, script, etc.

How does it work?
-----------------
In a nutshell, you ensure that expressions used in priviliged contexts
are wrapped into trusted types by using $sce.trust(value, type).
Directives that require safe expressions will use
$sce.getTrusted(expression result, required type) to extract the value
for use.

What does this accomplish?
--------------------------
This enables easier analysis for security issues such as XSS, etc.
Priviliged contexts require explicitly $sce.trust()'d values, simply
binding ng-bind-html-unsafe to, say, a textarea binding won't work. One
can grep for $sce.trust calls to ensure that only bindings that you
trust (e.g. sanitized html returned from the server in the case of
ng-bind-html-unsafe) are marked safe for use in priviliged contexts. If
one can keep all $sce.trust calls at the RPC boundaries to markup safe
values returned by the server, the auditing load reduces significantly.