[MSBuild] Fix the ${level} and ${number} capture.

Fixes: https://bugzilla.xamarin.com/show_bug.cgi?id=14767

	Some people, when confronted with a problem, think
	“I know, I'll use regular expressions.”   Now they have two problems.
	- http://regex.info/blog/2006-09-15/247

ToolTask uses a regular expression to extract various bits of
information from the warning/error message. Unfortunately it was
inadequate, and didn't correctly match on some errors.

The error message in this case is:

	class1.cs(16,4): error CS0152: The label `case 1:' already occurs in this switch statement.

The problem was that while the previous regular expression would
succeed in matching the above string, it was horribly inaccurate in
what it captured:

	${file}   = "error CS0152"
	${line}   = "16"
	${column} = "4"
	${level}  = "The"
	${number} = "label `case 1"
	${message}= "' already occurs in this switch statement."

Did I mention hilariously wrong?

There were two problems with the previous pattern:

 1. It allowed filename+(line,column) to be _repeated_, which is
    clearly insane. Filename/etc. shouldn't be repeated.

 2. ${number} captured ".*\d", i.e. anything ending with a number, so
    when the message had a number embedded within it, it was captured.

For good measure, use RegexOptions.IgnorePatternWhitespace so that
we don't have a horrendously long regex pattern to compare for diffs
the next time this needs fixing, and add NUnit tests.