Adds a basic support to add external platforms

fixes #41

Adds a new functions register_hardware_platform(). This functions takes
a path to the hardware platform such as
${ARDUINO_SDK_PATH}/hardware/${PLATFORM} and creates the varibles:

${PLATFORM}_CORES_PATH if cores exists
${PLATFORM}_BOARDS_PATH if boards.txt exists
${PLATFORM}_BOARDS if boards.txt exists
${PLATFORM}_PROGRAMMERS_PATH if programmers exists
${PLATFORM}_VARIENTS if varients exists

${PLATFORM} is the uppercase of the last directory name and so is
compatable with the previous variable names (ie hardware/arduino will
create ARDUINO_CORES_PATHS...)

Removes the now unused load boards and programmers methods for the
arduino platforms as this is now handeled by the new function.

Adds some new varibles;
  PLATFORMS lists all the registered platforms.
  VARIANTS  lists all the registared variants.
  ${variant}.path the path of the pins header file for the variant this
    is now used instead as the include path rather then
    ${ARDUINO_VARIANTS_PATH}/${variant}

Modifies the print boards and programmers to list all the platform
boards and programmers.