user: Rename e_userCommands to user_command_t and switch prefix

This renames the enumeration representing all of the  possible commands from
the user from e_userCommands to user_command_t, which makes it more clear
that it is an actual type.

Besides just renaming the enumeration, also the prefix for all of the commands
is now "UC_" instead of "UI_". The appropriate Doxygen comments are updated,
too.
user.c: Fix coding style guideline violation
user.c: Move command code handling into own function

This moves the actual command code handling in its own function
(user_command_handle()). All successfully decoded IR codes (except when in
training mode) will be passed to this function. This makes it possible
to also handle user commands received from a different source.
user.h: Refine USER_CREATE_IR_HANDLER()

This refines the Doxygen comment of the macro. Furthermore the parameter is
renamed, so it should be more clear what is meant to prevent any confusion
between code and user command.
user: Rename e_MenuStates to menu_state_t

This renames the enumeration representing all of the  possible menu states from
e_MenuStates to menu_state_t, which makes the intent more clear.
Change type of variable handled within UserState_HandleIr()
user: Rename various functions from *_HandleIr() to *_HandleUserCommand()

As this functions support user commands in general and are not specific to IR
commands anymore, it makes sense to rename them appropriately. Furthermore the
type of the parameter for all of these functions is changed to "user_command_t"
and the name of the parameter is changed to "command". The Doxygen comments are
updated, too.
user: Move user_command_t into own header file

This makes sense so that other modules that need to interact with the user have
access to it, too, without having to include user.h itself.
user: Rename user_command_handle() to handle_user_command() and make it public

This renames the function to prevent confusion with the "user_command" module.
Furthermore it makes the function accessible through the header, so other
modules can actually use it.
user.c: Refine Doxygen comment block of g_eepromSaveDelay
user_command.h: Refine Doxygen comments of various entitites
Add FIFO module

This adds an implementation of a FIFO, which will later be used by the UART
module to be able to work asynchronously.
uart: Rework module to work asynchronously and add receiving functionality

This reworks the UART module in a way that it works completely asynchronously
using interrupts. Some means to synchronize are provided, too. Furthermore it
also adds receiving functionality, which enables to get data received by the
UART hardware.

The reset functionality along with the macros BOOTLOADER_RESET_UART and
BOOTLOADER_RESET_WDT is removed by this, as it needs to be reimplemented
in the proper place later on.
TODO: Add couple of items
base.h: Change nibbleToHex() to return lower case characters
base.h: Change type of parameter of uint16ToHexStr()

This changes to parameter to an array, which explicitly declares how big
the buffer has to be.
base: Refine Doxygen comment of uint16ToHexStr()
base.h: Implement uint8ToHexStr()
Replace uart_putHexByte() by uint8ToHexStr()
base: Implement hexStrToUint8()