This implements a simple hwconfig infrastructure: an
interface for software knobs to control hardware.

This a is very simple implementation, i.e. it is implemented
via the `hwconfig' environment variable. Later we could write
some "hwconfig <enable|disable|list>" commands, ncurses
interface for Award BIOS-like interface, and frame-buffer
interface for AMI GUI[1] BIOS-like interface with mouse
support[2].

Current implementation details/limitations:

1. Doesn't support options dependencies and mutual exclusion.
   We can implement this by integrating apt-get[3] into Das
   U-Boot. But I haven't bothered yet.

2. Since we don't implement a hwconfig command, i.e. we're working
   with the environment directly, there is no way to tell that
   toggling a particular option will need a reboot to take
   effect. So, for now it's advised to always reboot the
   target after modifying the hwconfig variable.

3. We support hwconfig options with arguments. For example,

   set hwconfig "dr_usb:mode=peripheral,phy_type=ulpi"

   This selects three hwconfig options:
   1. dr_usb - enable Dual-Role USB controller;
   2. dr_usb_mode:peripheral - USB in Function mode;
   3. dr_usb_phy_type:ulpi - USB should work with ULPI PHYs.

The purpose of this simple implementation is to refine the
internal API and then we can continue improving the user
experience by adding more mature interfaces, like a hwconfig
command with bells and whistles. Or not adding, if we feel
that the current interface fits people's needs.

[1] http://en.wikipedia.org/wiki/American_Megatrends
[2] Regarding ncurses and GUI with mouse support -- I'm just
    kidding.
[3] The comment regarding apt-get is also a joke, meaning that
    dependency tracking could be non-trivial. For example, for
    enabling HW feature X we may need to disable Y, and turn Z
    into reduced mode (like RMII-only interface for ethernet,
    no MII).

    It's quite trivial to implement simple cases though.
