read-cache: be specific what part of the index has changed

With this knowledge, we could only update updated extensions, or the
main cache... This patch does none of that. Just mark what parts have
changed.
read-cache: save index SHA-1 after reading
read-cache: save untracked cache as an extension
status: support untracked cache
status: save untracked cache outside of the index

Logically the untracked cache is part of the index. Physically it may
reside in $GIT_DIR/index.untracked, which strictly follows index format,
except that it only contains the untracked cache. $GIT_DIR/index still
has an empty untracked cache, to note that we may need to look for
$GIT_DIR/index.untracked.

The reason is for large repositories, writing cache takes a signficant
time. Take gentoo-x86.git (117k files, 25k dirs, 10MB index) for
example, reading the index (v4) takes 131ms, writing takes 200ms. On
this repository, read_directory() takes 450ms, which is reduced to
under 10ms with untracked cache. So we could have saved 400ms, but the
writing part cuts back 200ms, half of the gain.

PS. the idea could be applied to index refresh as well.
update-index: manually enable or disable untracked cache
test code
TIME() macro for measuring how long a block is executed
time