modified to generate a unique version release string

cmake now uses git to generate a unique version release string, which
will consist of the latest tag, and if beyond this tag, will also
contain the number of commits beyond that tag plus the SHA1 commit id;
if git is not available (building from a .zip of .tar.gz download),
then it will use the major, minor and patch numbers set in
CMakeLists.txt; the version numbering also allows for negative patch
numbers, which represents what was prevsiously called preliminary or
developmental releases

modified the program to print this release string instead of the major,
minor and patch numbers directly; and will not output the GPL header
when outputting the version number to be consistent with other programs
fixed program name to not output extension on Windows
add ability to set build type from an environment variable

if the CMAKE_BUILD_TYPE environment variable is before running cmake,
then its value is used to the CMAKE_BUILD_TYPE cmake variable if it is
not already set; the current build type is then reported in a status
message
corrected several memory issues

one memory leak was corrected and two cases where uninitialized memory
was being accessed; also added CMakeList.txt.user file to .gitignore,
which QtCreator puts in the directory (for saving project info)
added new memtest script

script for detecting memory issues as each of the regression tests are
run; requires the valgrind program, which is only available on Linux,
so this script is not configured on Windows systems
changed translator output rpn list to QList class

updated CMakeLists.txt to support using Qt;
also required changing the list element pointer in the done stack to a
a rpn item pointer (doesn't need access to list), the list element
pointer in the command stack to an index (needs to know where in the
list to insert tokens), and the list element pointer array in the rpn
item structure to a rpn item pointer array (doesn't need acces to list)
removed token leak detection code

Qt does not interface well to self implement new and delete operators;
though not as convenient (since the contents of the tokens are not
saved), valgrind will be used for detecting token leaks for now on
removed error template, changed how table initialized

table initialization no longer in constructor but a separate function,
  which returns a list of error strings if any errors are detected
remove list.h (all lists now use Qt classes), also removed test_stack

added changed comments missed in last commit
changed translator stacks to use QStack class

the resize and size functions were used to simulate the push(void) and
  null_pop(void) functions of the Stack class
removed stack.h (all stacks now use Qt class), also removed test_stack2
replace stdio/strings with Qt classes (main and test)

modified ibcp.cpp and test_ibcp.cpp:
replaced are strings with QString and QByteArray
converted file I/O to QFile (with support from QFileInfo)
converted output to QTextStream
renamed variables and functions to Qt naming convention

c include files removed (stdio.h, stdlib.h and stdarg.h);
also added ibcp program version output to regtest and memtest
changed to use text stream to read input

using QTextStream allows files to be read into a QString, so no
conversion from QByteArray to QString will be needed once Parser is
converted to QString
corrected problem when git is present but not the git repository

when the git repository is not present (like when an archive file is
downloaded for a tag), but the git command is, the git command
generated an error and the release string was blank (the program
would then not output the version correctly)

the CMakeLists.txt file was modified to detect this condition and set
the release the same as if the git command is not present
changed regtest script to work on Windows from download zip

the problem was that the download zip contain Unix format files
(newline only), but upon running the program on Windows, the output
files are in DOS format (CRLF) so the files don't compare

the cmp used was changed to diff, which can optional ignore the
differences in the line separators (-w ignore white space option)
replaced test mode name map with a vector

a QVector is a better solution for this case then a QMap, the
enumeration was moved back into the function with a new size of
value, and a variable name missed was changed to camel casing
changed parser code to use Qt functions

replaced String class with QString
removed string.h/cpp and test_string program
removed immediate command support (including parser test 1)
updated enums.awk for change from char * to QString
renamed variables and functions in parser to Qt style naming
removed the rest of the test programs

the test programs no longer apply with the transition to Qt
changed parser test 3 to match on all platforms

using the Qt libraries for number conversion allows even smaller
double values to be excepted; previously the value 1.234e-324 would
cause an error on all platforms, but with Qt on Windows, the value
needs to be 1.234e-509 before an error occurs, so the test value was
was changed to this
reorganized classes into separate files
token: changed to class, changed to Qt naming

changed Token from struct to class
added necessary access functions for members
renamed variables and functions to Qt style naming
restructured table class files and changed naming

all private table definitions (constants and structures) that are only
used in table.cpp to table.cpp; the code for the table access functions
were also moved to table.cpp since the structure definitions were moved;
renamed table variables and functions to Qt style naming; changed the
rest of the char* to QString