[Microsoft.Build.Engine] Fix the escaping/unescaping of FullPath metadata

It is incorrect to escape the FullPath metadata for a build item when
we invoke GetEvaluatedMetadata. If we do this we end up completely breaking
every file with a special character in it as things like this would always
fail as we'd pass an escaped path to the filesystem:
	File.Exists (item.GetEvaluatedMetadata ("FullPath"))

The iOS designer encountered this issue when we added retina images
called "foo@2x.png" to our solution.

With tests.
[Microsoft.Build.Utilities] Fix the escaping/unescaping of ItemSpec

This should hopefully fix compilation of projects using files with
names like 'foo@2x.png' in various places like embedded resources
or content items which must be copied to the output directory.

With tests.
[Microsoft.Build.Utilities] Properly escape/unescape ItemSpec

With tests.