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
Basically, there are two options:

1. it can be a suffix for the attribute name, but not a common attribute name (not alpha/numeric), such as `!`,`*`, `~`, etc. This would allow it to be used after any attribute name.

2. it could precede the attribute name, and use a fatter/more human readable syntax, such as `ng-attr-all-or-nothing-<name>` --- it's a bit trickier to use this pattern for isolate scope bindings, and it's a bit more code to use this way, and obviously more typing to actually use this way. But it has the benefit of being more readable.

So, I'm not sure which I'd go with --- personally I'd prefer to make things easier for people, but realize that a "magic syntax" could get in peoples ways in some circumstances, rather than making things easier. So we should figure out how this should work.