Add FileStore#changed? abstract method

It gets a file path and a blob object and should detect if the
content of the file is different from the blob content.

Requiring the user to implement this gives one benefit:

It does not enforce a single way to detect changes. This is very
important because there are a lot of optimizations that can be done
when checking for modifications. For example comparing the files
by content/hash once and then by modification time, or remembering
the last commit blob ids and detecting file system changes using
FS events.
Also, if the user decides to implement a remote file store (for
files that are on a remote server) there is a lot of room
for caching or indexing of these changes (for example by keeping
a list of hashes instead of transferring the whole files).