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.
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.