Tidied code, added .NET runtime version to generated filename

I gave the code a bit of a tidy-up, including updating conventions for .NET 4. 

I also changed the generated filenames to start with mdef_ rather than have that as a suffix, as it makes finding them in the temp folder much easier, and added the .NET runtime version that the macrodef was compiled with to the filename. This is because I hit a problem on our build agents where we have multiple versions of NAnt, and if the first NAnt to run on an agent was compiled with .NET 4, then this would cause all macrodefs to be compiled with .NET 4, which means that if an earlier version of NAnt then ran, it would try to use the pre-compiled macrodefs (since it only identified by hash), and then fail since the macrodefs were compiled with a later version of .NET. The changes I've made mean that different NAnt versions can now comfortably run side-by-side.