Implement Reference.target= as a method

This new method is Reference.set_target() which in addition lets you
specify what to use in the reflog.
Get rid of Reference.append_log()

We do not want this as it is riddled with race conditions.
Get rid of a settable Reference.target

Updating the target of a reference is not like setting a property. It
involves appending to the reflog under the same lock, so we must do it
all the same time. Thus setting the target becomes a function which
takes the new target and what the use would like to add to the reflog.
Update reference documentation
Repository: make head read-only and introduce set_head()

Following from the previous commits, make 'head' read-only and provide a
method to update head while providing a message.

The checkout() codepath which switches branches has been updated to
provide a reflog entry which mimics git's.
Merge remote-tracking branch 'carlos/reference-update'