Elaborate GPIO class hierarchy - introduce PortPin.

IPin is completely abstracted pin without constrains of belonging to
anything. PinPort is a pin which explicitly belongs to a port and
has specific bit position in it.
Make width part of IPort and add more methods to it.
IPin is the most basic notion, put it at the top.
Make _REG*() macros op-precedence safe.
Remove dup inline keyword.
Use _REG8() accessors.
Add draft implementation of ParBusAligned:

Parallel bus which is aligned to properly ordered subrange of port pins.
Add hw_config_*.hpp file support.

This provides best practices for separate hardware configuration
of particular target/board/project from application logic.
Add walkthru for using hw_config.
Switch uart_echo to hw_config.