initramfs init: enhancement / redesign proposal

In order to better support multiple mount types and future extensibility, I would like to propose the following enhancements: Documentation below could be added to the Wiki.

### Kernel commandline parameters:

#### Mandatory support:
* debugging # Start debug shell on error
* bootchart # Gather boot statistics
* ssh # Enable ssh server
* progress # Show boot progress
* fastboot # Speed up boot

* boot=TYPE=path # Specify mount type and path to mount as System. path can point to either a partition containing SYSTEM image, or to a raw block device containing Squashfs (for use with NBD or embedded devices like Raspberry Pi etc.)
* disk=TYPE=path: specify mount type and path to mount as Storage
  TYPE=path can be one of:
  * LABEL=label # mount partition by label, supported by busybox mount
  * UUID=uuid # mount partition by UUID, supported by busybox mount
  * NBD=server:port # mount NBD device
  * NFS=server:port:/path # mount NFS export
  * ISCSI="option1=val,option2=otherval,..." # mount iSCSI target. May require rethinking on how to pass those options, there could be quite a lot of them...

#### Optional support (for backwards compatibility, only if feasible):
* netboot # implies: boot=NBD=$NBD_ROOT_SERVER:$NBD_ROOT_PORT disk=NFS=$NFS_OVERLAY overlay
* nbdroot=server:port # (requires: netboot) implies: boot=NBD=<server:port>
* nfsoverlay=server:port:/path # implies: disk=NFS=<server:port:/path> overlay

#### Optional support, proposed
* break=step,step,... # (requires: debugging), start debug shell at a particular step. May require 'grep' applet in busybox.
* overlay # Use an overlay to support multiple OpenELEC clients with a single boot configfile. Might only work for NFS mounts because it needs subdir mount support.

To support all those combinations of mount types, I think it is best to mostly redo the init, keeping parts which can be reused.

### init script functionality

#### Basic infrastructure
* Global variables: keep most of them, add when necessary
* Kernel commandline parsing: strip to bare minimum
* fastboot handling, progress(): keep
* error(): run `/bin/busybox halt` on error, not stopping here could do more damage
* mount_part(): rewrite to handle different mount types. need to find out if / when / how to retry mount for different mount types
* update(): keep, check to make sure both /storage/.update && /flash contain an image, to prevent accidental clobbering of unrelated fs
* hfsdiskprep(): is this really needed? if so, keep it
* mount_*(): rework to match boot steps, see below
* filesystem moves / switch_root: keep

#### Other changes
* Make error messages more meaningful, "INIT_3" doesn't mean much when a description is always shown anyway.

#### Boot steps
* mount special filesystems
* setup console
* parse kernel commandline
* mount_flash(): Mount system image partition or raw block device
* mount_storage(): Mount storage partition
* check_update(): Check for and perform system update. Disable update downloads when /flash cannot be written to (ro export)
* mount_sysroot(): if /flash contains system image file, loop mount that on /sysroot, otherwise the image contents were already mounted straight from a block device onto /flash, so move /flash to /sysroot
* move /flash and /storage to their final places
* switch root and continue with final init