The difference is that ^ and $ bindings can have modified behavior.
When multiline mode is on, the ^ and $ anchors multiline beginning and end of a line.
When multiline mode is disabled, the ^ and $ bindings multiline beginning and end of the line.
Most regular expression implementations have multiline mode.
With Ruby, Perl, or Javascript, it is defined using the m modifier. e.g. /pattern/m
In .NET, it is defined using (?m) inside the template itself or from the RegexOptions.Multiline enumeration.
To answer your third question ...
\A - match should occur at the beginning of the line.
\Z - the match must occur at the end of the line or before \n at the end of the line.
\Z - match should occur at the end of the line.
These three are constants that are not affected by any modifiers. I agree that \A and \Z seem like an illogical pairing. For me, this also does not matter much. But in case you might have a back-line tuple that you want to ignore, then \Z may be preferable.
source share