Port new sparse pagecache patches forward to v3.18

Planning on submitting this upstream soon, since discussing it with
people at LPC a couple weeks ago. Goal is to have this working and send
it to the mailing list by the end of this week.

I got lazy and stopped maintaining my newer changeset after v3.14, and
quite a lot has changed since then. This is that changeset against
v3.18, and it actually turns out much nicer because of some changes to
the functionality in mm/filemap.c

This is incomplete: it doesn't address pages faults at all. That
shouldn't be too difficult though: the fault handling code is quite a
bit nicer now than it was in 3.14, so hopefully it won't be horribly
time-consuming to figure out how to make that work.

At this point, read() and write() should work.