Remove duplicate actions from build.xml

The arduino script was copied into the output directory twice in the
linux-build target. The avrdude64 binary was copied both by the
linux-build and linux64-build targets.
Remove duplicate assignments from avr/platform.txt

These two variables were assigned a value twice. The second pair of
assignments were correct and the ones actually used, so remove the first
ones.
Split off toolchain and native library installs in build.xml

This doesn't change anything except a bit of ordering in the build, but
prepares for making these steps optional.
Make installing toolchains and native libraries optional

If you pass -Dinstall_toolchains=false or -Dinstall_native_libs=false to
the ant command, the toolchains or native libraries will not be
installed into the build/work directory, making the IDE fall back on the
system versions instead.

This is intended for advanced users who run from git and want to use
their system toolchain or libraries. These toolchain-less installs are
not intended to be distributed as tarballs.
Split off hardware folder copying in build.xml

This shouldn't change anything except a bit of ordering, but prepares
for the next commit.
Remove hardware/tools folder

This folder is automatically created by the buildsystem inside the
$platform/work directory already, so no need to carry an empty folder
here.
Allow making $platform/work/hardware/arduino a symlink

This allows easily changing the arduino core files during development,
without having to re-run ant on every build. This feature can be
switched on by running ant -Dlink_harware=true.

This also adds a clean-hardware target, to remove the work/hardware
directory during the build. This is needed to  prevent problems when
switching the linking on and off. As an additional feature, if you
remove any files from the hardware/arduino directory, they'll actually
get removed from the resulting build now as well.

The actual deleting of the symlinks is a bit of a mess, since ant's
symlink support is a bit weird and underdocumented.
Move command printing into ProcessUtils::exec

This removes some duplicate code, and prepares for the next commit.
Fall back to system uploader tools

Before, when no bundled compiler was available, the IDE would fall back
to using system-wide commands. For the uploader tools, the IDE wouold
try to execute a non-existent tool and show an error.

This commit implements this in a more generic way: Whenever executing an
external command, if the full path to the command could not be found,
strip the path and let the system shell find the command in the regular
places.

Because of this, the previous special handling of compiler.path is
removed and the variable is explicitely defined in avr/platform.txt.
sam/platform.txt already contained an explicit definition of
compiler.path.
Use PGM_P instead of prog_char

On later versions of avr-libc, prog_char is deprecated. In 0acebeeff48
the one occurence of prog_char was replaced by "char PROGMEM", which is
not entirely correct (PROGMEM is supposed to be an attribute on a
variable, not on a type, even though this is how things work in older
libc versions). However, in 1130fede3a2 a few new occurences of
prog_char are introduced, which break compilation on newer libc versions
again.

This commit changes all these pointer types to use the PGM_P macro from
<avr/pgmspace.h>. This macro is just "const char *" in newer libc
versions and "const prog_char *" in older versions, so it should always
work.

References #795