More updates to get the various CAM modules to build on Windows.  This is the first point at which I've been able to make the whole project build on Windows.
Fixed typo in the UIManagerInst::makeCamFeature() method that was preventing the 'Add TPG' function from working.
Got it to the point where the TestPlugin loads alright but I it's not right yet.  I can't help wondering if I've made a mess of the plugin classes while trying to get this working.
Changed lots of printf() calls to qDebug(), qWarning() etc.

Changed references to PreCompiled.h so that none of them included a path to the header file within the '#include' line.  Instead I've added an extra path to the CMakeLists.txt files so that the correct PreCompiled.h file was chosen based on the project rather than the source file that refers to it.  This allows header files to be included in both the CAM and CAMGUI projects with each one selecting the PreCompiled.h file for its own project.  Without this, we end up with conflicting __declspec(dllimport)/dllexport definitions.

Removed TPGSettings.cpp from the CamGui project as it's defined within the Cam.dll file and is, therefore, multiply defined if it's also included in the CamGui project.
Moved the implementation of some methods from the header file into the CPP file so that it would not be defined twice in the CamGui project (that gets it both from the header file and from the link to the CAM.DLL file)
Moved some more method implementations from the header file to the CPP file so that we don't end up with a duplicate implementation when one module loads both the header file and the other module's library (DLL)
Resolved conflicts.  Only minor changes
Changed references to PreCompiled.h from the 'double quotes' to the angle brackets form of inclusion in an attempt to stop it looking in the 'current' directory before looking in the INCLUDE paths given to the compiler.

Removed the FCAppCam pre-processor from the Windows build of the CamGui project so that it could be used to indicate whether we're compiling the 'Cam' library as opposed to the 'CamGui' or any of the plugins projects.  This allows some extra macros to be implemented in each of the two PreCompiled.h files to specify the correct dllimport/dllexport values based on the project rather than on which file includes which PreCompiled.h file.

Moved lots of method implementations out of the header files into the CPP files so that we don't end up with duplicate implementations when the CAM library is linked with the CamGui and/or Plugin libraries on the Windows build.
Changed the prefix and destination values for the Windows build of the TestPlugin so that the DLL ended up in the directory where the main application would look for it.

Fixed up the dllexport/dllimport declarations for the TestPlugin.
Just some small cleanup hoping to figure out where the crash is coming from
Changed the CppTPGFactory::scanPlugins() method to stop deleting the CppTPGPlugin objects each time because pointers to these objects are still being held by parent objects.  As an alternative, we now check the plugins that we've already seen (by file name) and only load those that have not been loaded before.  This fixes a crashing bug when a newly added TPG object is selected and its properties listed.  i.e. the object used to find the properties had a stale pointer
Added extra words to comment to remind me which object holds the pointers that need cleaning up if we delete a CppTPGPlugin object
Added mechanism to cleanout plugin objects when a CppTPGFactory object is deleted (even though it's a singleton)
Merge branch 'cam-py' of git://github.com/DavidNicholls/FreeCAD_sf_master into cam-py

Fixed Conflicts:
	src/Mod/Cam2/App/CamManager.h
	src/Mod/Cam2/App/Plugins/TestPlugin/CppExampleTPG.h
	src/Mod/Cam2/App/TPG/TPGSettings.h
Merged Andrew's cam-py branch with my latest changes
Reverted extra check for plugin filenames that was avoiding a plugin from being loaded twice.  The fix was really to add the CppTPGPlugin::grap() and release() calls to the CppTPGDescriptorWrapper class.  The problem was that the CppTPGDescriptorWrapper object was ending up with an invalid pointer because the release() call in the scanPlugins() method was causing the CppTPGPlugin object to be deleted.
Forgot to add the grab() and release() calls for the TPGDescriptor object as well in the CppTPGDescriptorWrapper class constructor/destructor.
Merge pull request #5 from DavidNicholls/cam-py

Merged Andrew's cam-py branch with my latest changes.
Merge branch 'cam-py' of https://github.com/andrewjrobinson/FreeCAD_sf_master into cam-py
Reversed the logic on the 'if' statement so that it matched the one above in an attempt to avoid confusion (and to force a change to work through GIT)