Fixed parsing of dependency files (.d) to improve sketch build speed

Close #2255
Remove core.a before rebuilding it

Before, the ar command was just ran for all .o files that should end up
in core.a, which should replace any old code in core.a. However, it
seems that in the unlikely event that functions or entire source files
are deleted, they might linger in the core.a file.
Delete core.a when building it fails

This prevents a half-finished core.a file from lingering around.
Currently, this should not make a difference since core.a is rebuilt
every time, but this prepares for skipping this build step if possible.
Merge pull request #2395 from cmaglie/fix-makedep-unescape

Fixed parsing of dependency files (.d) to improve sketch build speed
Don't recompile core.a if none of the .o files changed

Before, core.a would be rebuilt on every build, even when none of the
core .o files changed. Now, the timestamps are checked against the
timestamp on core.a first, skipping the build if nothing changed.

Because this uses the current list of .o files, there is a corner case
when a source file is deleted, but no other source file is modified. In
that case, core.a is not rebuilt, even though it should be. However,
this is such a narrow and unrealistic case, that it should pose a real
problem.

This fixes part of #1991
Merge remote-tracking branch 'ide-1.5.x-core.a-rebuild' into ide-1.5.x
Explicitely store a layout type for a library

Previously, the useRecursion and srcFolders were filled on library
creation, based on the existence of the src folder. Now, a layout
variable is set, and the useRecursion() and getSrcFolder() methods
change their return value based on the layout in use.
Let Sketch.getExtensions() return a List

This simplifies upcoming changes.
Use SketchCode.isExtension in more places
Don't store the extension in SketchCode

Nobody was using it anymore, except for checking against specific
extensions, which is easily done against the filename itself. This
prepares for some simplification of Sketch.load next.
Removed unused Base.getBoardsViaNetwork() and related member.
Removed some trivial warnings
Removed some warning from Editor class
Refactoring of Theme class
Refactored and simplified EditorConsole class.
Splitted GUI and Streams in EditorConsole
Rationalized Preferences and Theme classes.

Removed a lot of duplicate/unused code. Preferences un-marshalling
is now handled in PreferencesMap class.
Removed GUI dependencies from SketchCode class.

Moved GUI fields into a SketchCodeDocument container class.
Make Compiler independent from Sketch.

Create a class SketchData to store all relevant data for a sketch
(trying to keep GUI stuff out of the way).

Moved preprocessing code from Sketch to Compiler.
Reintroduced 'Next Tab' and 'Prev Tab' click actions