recovery: try to write EMMC partitions more reliably

Nexus 4 has flash errors that manifest during large writes (eg, of the
radio partition).  Writes of some blocks seem to be dropped silently,
without any errors being returned to the user level.

Make two changes to the partition-writing code:

- break it up into 1MB writes instead of writing partitions with a
  single fwrite() call.  Pause for 50ms in between every chunk.

- read the partition back after writing and verify that we read what
  we wrote.  Drop caches before reading so we (hopefully) are reading
  off the actual flash and not some cache.

Neither of these should be necessary.

Bug: 9602014

Change-Id: Ice2e24dd4c11f1a57968277b5eb1468c772f6f63
recovery: write partitions more conservatively

Write and verify partitions using write(2) and read(2) rather than the
stdio functions.  Read and write in 4kb blocks.  When writing, fsync()
every 1MB.

Bug: 9602014
Change-Id: Ie98ce38e857786fc0f4ebf36bb5ffc93b41bc96f
recovery: sleep after writing partition and closing it

Another speculative attempt to get everything we write actually stored
to the device.

Change-Id: Icf40b0741b4c535e55ea34848073a97d90dc0e70
recovery: Support for compressed backups

 * Systems are getting quite large nowadays, and performing backups
   without using compression is wildly inefficient. A good compression
   algorithm also gives us a big speedup on backup and restore times since
   the process is entirely I/O bound.
 * Bring in pigz (via libminipigz), which is a multithreaded version of
   gzip and pipe tar backups and restores thru it.
 * Autodetect compressed images where appropriate, and add a menu option
   to select the compressed format by default.
 * Also fixed various trivial warnings and const-correctness issues.

Comparison on my Flo device right now:

Uncompressed:
  1868512   2013-08-24.07.10.08

Compressed:
  1149300   2013-08-24.06.51.14

Change-Id: I55025c993662142f5b647e600daf6885f9be6667
recovery: all vold loglines deserve newlines

Self-nominating for the most impactful commit CM has seen
since 2009.

Change-Id: I450167573b7cf6db1a92227aef7ff3ed95856dd5
recovery: close zip archive after installation

Otherwise recovery will restart itself (gets killed by vold for
leaving a file open) when reboot is selected.

Change-Id: I915c3082bd99ca994c3a4cbe5ba913866051bc0e
Merge branch 'cyanogenmod' into cm-10.2