feat($compile): allow any attribute to use allOrNothing interpolation

Previously, only a limited set of attributes would use allOrNothing
interpolation. It is now possible to request allOrNothing interpolation by
appending a '!' to the attribute name. This should result in attributes being
removed / not added to the node if their values are undefined, which can
prevent some kinds of errors in SVG elements.

Example:

    <circle ng-attr-r!="{{dimensions.radius}}" x!="{{position.left}}">

Closes #8376
I'm not sure this will make a measurable difference, but in some cases putting the boolean first would win (when ng-attr-* is used frequently), in other cases it would lose (when href/src are used frequently). It would depend on the app, I guess