Users can now configure a "notification callback"; notifications are
raised when a condition occurs in a git repository that an end-user
should know about, or that the calling application may wish to act on.
Notifications provide structured data, that is provided based on the
type of notification (for example, file paths).
In addition, an an informative message is provided when a notification
is raised; the structured data should be sufficient for callers to build
their own message, but the provided message should make that
unnecessary.
Some examples of likely future use of notifications:
* `core.safecrlf=warn` messages are warning-level notifications. This
allows the calling application to receive these notifications and
display them to the user (for example, sending them to the console).
* When a file cannot be written during checkout, we should inform the
calling application. By default, git continues to check out when one
(or more) paths fail to be written, but conclude that the checkout
failed overall. Given this somewhat odd behavior, callers may wish to
short-circuit this when any path fails to be written.
* Callers may want structured failure information for a `safe.directory`
failure so that they can get the file path without having to try to
"screen scrape" the git_error message.