fix($compile): throw when non-optional '&' binding is used but not specified

Also, do not set up an expression in scope if the '&' binding is optional.

BREAKING CHANGE:

Previously, '&' expressions would always set up a function in the isolate scope. Now, if the binding
is marked as optional and the attribute is not specified, no function will be added to the isolate scope.

Finally, if the '&' expression is not optional, and the attribute is not specified, then rather than
the function being essentially a NOOP, it will instead throw an error indicating to the programmer that
a required attribute was not specified.

Closes #6404