ide: workspace: (#882) save workspace file (.ews) in json format.
 - (#56) save opened files with relative file paths.
 - discard old or broken opened files entries.
epj2make,ide: tweak executableLauncher property and execPrefixCommand backward compatibility and current json format saving.
buildsystem,epj2make,ide: (#996-related) <wip> fix remaining issues with .ec modules containing ampersands or projects in paths that have ampersands in it or other special characters.
 - fix crossplatform.mk's echo shell command to all echoing empty line.
 - add cat/type shell commands to crossplatform.mk
 - <wip> fix crossplatform.mk's shell commands (cp, mkdir, rmdir?) to properly handle file lists with file name with spaces in them
tarball: <wip> add portable distribution tools. make portable. etc...
wip todo:
 [ x ] fix the commented out rules for files with filename with spaces in them
 [ . ] add support for PortableApps.com
 [ . ] portable/README -- rename the flavors? core/minimal/complete vs core/mingw/mingwc++/allinone

 [   ] OBJ = ../obj/portable.$(CONFIG).$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/ vs OBJ = ../obj/portable/
 [   ] 32 vs 64 bit vs both
 [   ] cross compiling (portable and installer)
 [   ] linux version!
 [   ] ../obj/win32/bin -- hard coded paths, use vars, support bith depth, crossbuild

 [   ] missing opt #PORTABLE_ECERE_SDK_OPT_TINYCC -- include this in minimal
 [   ] missing opt #PORTABLE_ECERE_SDK_OPT_SOURCES -- to include ecere-sdk source code
 [   ] missing opt #PORTABLE_ECERE_SDK_OPT_TDM_CPP -- make cpp optional, PORTABLE_ECERE_SDK_OPT_TDM would not install c++
 [   ] missing opt #PORTABLE_ECERE_SDK_OPT_MINGW -- a mingw-w64 edition? I think not...
 [   ] missing opt #PORTABLE_ECERE_SDK_OPT_MINGW_CPP -- "

 [   ] ecereIDE.ini multiple compiler configs?

 [   ] these files?

       [   ] $(call cpq,../obj/win32.x32/bin/ecere.dll ../obj/win32.x32/lib/libecereVanilla.a "ecere-sdk32")
       [   ] $(call cpq,../obj/win32.x32/bin/documentor.exe ../obj/win32.x32/bin/ide.exe "ecere-sdk32/ide")
       [   ] $(call cpq,../obj/win32.x32/bin/ear.exe ../obj/win32.x32/bin/ec.dll ../obj/win32.x32/bin/ecc.exe ../obj/win32.x32/bin/ecereCOM.dll ../obj/win32.x32/bin/ecp.exe ../obj/win32.x32/bin/ecs.exe ../obj/win32.x32/bin/epj2make.exe "ecere-sdk32/compiler")
       [   ] $(call cpq,../obj/win32.x32/bin/EDA.dll ../obj/win32.x32/bin/EDASQLite.dll "ecere-sdk32/eda")

       [   ] $(call cpq,../ide/res/icon.png ecere.png ryoanji.png ryoanji-progress.png ""

       [   ] $(call cpq,../ecere/res/elements/areaClose.png ../ecere/res/elements/areaMaximize.png ../ecere/res/elements/areaMinimize.png ../ecere/res/elements/areaRestore.png ../ecere/res/elements/arrowDown.png ../ecere/res/elements/arrowLeft.png ../ecere/res/elements/arrowRight.png ../ecere/res/elements/arrowUp.png "ecere/elements"
       [   ] $(call cpq,../ecere/res/unicode/derivedGeneralCategoryStripped.txt "ecere/unicode"
       [   ] $(call cpq,../ecere/res/actions/folderNew.png ../ecere/res/actions/goUp.png "ecere/actions"
       [   ] $(call cpq,../ecere/res/devices/computer.png ../ecere/res/devices/driveHardDisk.png ../ecere/res/devices/driveRemovableMedia.png ../ecere/res/devices/mediaFloppy.png ../ecere/res/devices/mediaOptical.png "ecere/devices"
       [   ] $(call cpq,../ecere/res/mimeTypes/file.png ../ecere/res/mimeTypes/brokenFile.png "ecere/mimetypes"
       [   ] $(call cpq,../ecere/res/places/driveRemote.png ../ecere/res/places/folder.png ../ecere/res/places/folderRemote.png ../ecere/res/places/networkServer.png ../ecere/res/places/networkWorkgroup.png ../ecere/res/places/brokenFolder.png "ecere/places"
       [   ] $(call cpq,../ecere/res/status/folderOpen.png "ecere/status"

       [   ] $(call cpq,../ecere/locale/es.mo ../ecere/locale/hu.mo ../ecere/locale/mr.mo ../ecere/locale/nl.mo ../ecere/locale/pt_BR.mo ../ecere/locale/ru.mo ../ecere/locale/zh_CN.mo "ecere/locale"

       [   ] $(call cpq,../obj/win32/bin/ecere.dll ../obj/win32/lib/libecereVanilla.a "ecere-sdk"
       [   ] $(call cpq,../obj/win32/bin/documentor.exe ../obj/win32/bin/ide.exe "ecere-sdk/ide"
       [   ] $(call cpq,../obj/win32/bin/ear.exe ../obj/win32/bin/ec.dll ../obj/win32/bin/ecc.exe ../obj/win32/bin/ecereCOM.dll ../obj/win32/bin/ecp.exe ../obj/win32/bin/ecs.exe ../obj/win32/bin/epj2make.exe "ecere-sdk/compiler"
       [   ] $(call cpq,../obj/win32/bin/EDA.dll ../obj/win32/bin/EDASQLite.dll "ecere-sdk/eda"

       [   ] $(call cpq,coursework/Chapter\ 1\ -\ Getting\ Started/answers\ -\ chapter\ 1.odt coursework/Chapter\ 1\ -\ Getting\ Started/exercises\ -\ chapter\ 1.odt "ecere-sdk/coursework/Chapter 1 - Getting Started"
       [   ] $(call cpq,coursework/Chapter\ 1\ -\ Getting\ Started/Lab1.1/helloWorld.ec coursework/Chapter\ 1\ -\ Getting\ Started/Lab1.1/HelloWorld.epj "ecere-sdk/coursework/Chapter 1 - Getting Started/Lab1.1"
       [   ] $(call cpq,coursework/Chapter\ 1\ -\ Getting\ Started/Lab1.2/form1.ec coursework/Chapter\ 1\ -\ Getting\ Started/Lab1.2/HelloForm.epj "ecere-sdk/coursework/Chapter 1 - Getting Started/Lab1.2"
       [   ] $(call cpq,coursework/Chapter\ 2\ -\ Variables\ and\ Data\ Types/answers\ -\ chapter\ 2.odt coursework/Chapter\ 2\ -\ Variables\ and\ Data\ Types/exercises\ -\ chapter\ 2.odt "ecere-sdk/coursework/Chapter 2 - Variables and Data Types"
       [   ] $(call cpq,coursework/Chapter\ 2\ -\ Variables\ and\ Data\ Types/Lab2.4/lab2.ec coursework/Chapter\ 2\ -\ Variables\ and\ Data\ Types/Lab2.4/Lab2.epj "ecere-sdk/coursework/Chapter 2 - Variables and Data Types/Lab2.4"
       [   ] $(call cpq,coursework/Chapter\ 2\ -\ Variables\ and\ Data\ Types/Lab2.5/variables.ec coursework/Chapter\ 2\ -\ Variables\ and\ Data\ Types/Lab2.5/VariablesApp.epj "ecere-sdk/coursework/Chapter 2 - Variables and Data Types/Lab2.5"
       [   ] $(call cpq,coursework/Chapter\ 3\ -\ Operators/answers\ -\ chapter\ 3.odt coursework/Chapter\ 3\ -\ Operators/exercises\ -\ chapter\ 3.odt "ecere-sdk/coursework/Chapter 3 - Operators"
       [   ] $(call cpq,coursework/Chapter\ 3\ -\ Operators/Lab3/lab3.ec coursework/Chapter\ 3\ -\ Operators/Lab3/Lab3.epj "ecere-sdk/coursework/Chapter 3 - Operators/Lab3"
       [   ] $(call cpq,coursework/Chapter\ 4\ -\ Flow\ Control/answers\ -\ chapter\ 4.odt coursework/Chapter\ 4\ -\ Flow\ Control/exercises\ -\ chapter\ 4.odt "ecere-sdk/coursework/Chapter 4 - Flow Control"
       [   ] $(call cpq,coursework/Chapter\ 4\ -\ Flow\ Control/Lab4/lab4.ec coursework/Chapter\ 4\ -\ Flow\ Control/Lab4/Lab4.epj "ecere-sdk/coursework/Chapter 4 - Flow Control/Lab4"
       [   ] $(call cpq,coursework/Chapter\ 5\ -\ Structures\ and\ Enumerations/answers\ -\ chapter\ 5.odt coursework/Chapter\ 5\ -\ Structures\ and\ Enumerations/exercises\ -\ chapter\ 5.odt "ecere-sdk/coursework/Chapter 5 - Structures and Enumerations"
       [   ] $(call cpq,coursework/Chapter\ 5\ -\ Structures\ and\ Enumerations/Lab5/colors/lab5colors.ec coursework/Chapter\ 5\ -\ Structures\ and\ Enumerations/Lab5/colors/lab5colors.epj "ecere-sdk/coursework/Chapter 5 - Structures and Enumerations/Lab5/colors"
       [   ] $(call cpq,coursework/Chapter\ 5\ -\ Structures\ and\ Enumerations/Lab5/vectors/lab5vectors.ec coursework/Chapter\ 5\ -\ Structures\ and\ Enumerations/Lab5/vectors/lab5vectors.epj "ecere-sdk/coursework/Chapter 5 - Structures and Enumerations/Lab5/vectors"
       [   ] $(call cpq,coursework/Chapter\ 6\ -\ Classes,\ Methods\ and\ Instances/answers\ -\ chapter\ 6.odt coursework/Chapter\ 6\ -\ Classes,\ Methods\ and\ Instances/exercises\ -\ chapter\ 6.odt "ecere-sdk/coursework/Chapter 6 - Classes, Methods and Instances"
       [   ] $(call cpq,coursework/Chapter\ 6\ -\ Classes,\ Methods\ and\ Instances/Lab6/lab6.ec coursework/Chapter\ 6\ -\ Classes,\ Methods\ and\ Instances/Lab6/lab6.epj "ecere-sdk/coursework/Chapter 6 - Classes, Methods and Instances/Lab6"
crossplatform.mk: <wip> improve host architecture detection under windows.
extras/types/Currency: note on double vs int.
no fix yet -- debugging when current dir contains a binary file of an added project library, breakpoints inside lib won't work -- low priority issue
Makefiles.epj: add some buildsystem tests.
ide: <IDEA> custom find in files file filters.
ecere: gui/Window: tweak to update normalAnchor and normalSizeAnchor for gui config.
 - for GuiConfigData.ec functionality.
ecere: gfx/gui: add dummy driver named Template to serve as basis for implementing new drivers.
ecere: gfx/gui: add SDL 1.x support via new driver named SDL1.
ecere: gfx/gui: add SDL 2.x support via new driver named SDL2.
ecere: gfx/gui: add Pepper support via new driver named Pepper for targeting NaCl and PNaCl.
------------------------------------------------ customized starts here
ide: FindInFilesDialog: add checkboxes similar to 'include subdirectories' for in/ex-cluding 'obj' dirs and '.git' dirs.
ide: show lighter line numbers. make minimal line numbers width 3 instead of 4. show multiple lines selection in margin.
ide: add 'force single job compiling' checkbox to the toolbar.
ide: remove background image, make ToolBox and Properties Sheet invisible by default.
ide: nice about box tweaks.