Original CubeMX CodeGen Refactored

1. lots of new struct/type added. IRQ_HandleTypeDef, GPIOEX_TypeDef, DMAEX_HandleTypeDef.
2. DMA clock and GPIO clock are requested in get/put mode.
3. Up to now, we are not going to implement full-featured constructor/destructor pattern, which is too heavy and too dynamic. The workaround solution is to provide clone() method (see UARTEX_Clone) to establish delegation among structs/objects.
4. A key assumption here is that: we treat some 'object link' as dynamic states, such as uart/dma link, which should be established after init and reset to null after deinit. 

see the code.

there is the starting point for:
1. merge fw.1.2
2. provide io-uart implementation.