front: Lazy-load cheat files for performance.

This dramatically cuts down on both load and save times.  On my 2012
nexus 7, the load time has gone from roughly 1.5 seconds down to about
400 ms. Save time has gone from roughly 300 ms to about 150 ms.  The
entire merge process (copy, load, insert, save) has gone from about
2 seconds down to about 700 ms.

Note that the implementation is entirely transparent to external code
since the interface has not changed.

Lazy loading makes particular sense here, since the vast majority of
cheat section data will never be used by the user, particularly in a
single play session.  Parsing all this data and organizing it into
objects is a waste of memory and time.

This implementation isn't completely lazy; it does read the full cheat
file once, at the beginning, just as it had before.  Therefore any IO
exceptions will be thrown in the same place they had before.  What's new
here is that the lines of the file are read and stored in raw form only.
The parsing and object population only occurs when a CheatSection object
is first accessed, and the work is only done for that single section.
Thus the parsing effort is amortized.

This benefits the save (write to disk) process as well, because if a
cheat section has never been accessed, then the save method can simply
write back the original raw lines of text.

One other small benefit: Unless the user has loaded and saved the very
last cheat section in the file, we no longer have to worry about the
extra blank line at the end of the file.  I don't think it made a
difference anyhow, but it's one less TODO.