ExternalData: Add support for test parameters with semicolon

This commit ensuring that test parameters having an escaped semicolon "\\;"
are passed to the test program as expected.


The following CMake snippet illustrates the issue, after saving the file
to external-data-illustrate-semicolon-issue.cmake, it can be run using:

  cmake -P external-data-illustrate-semicolon-issue.cmake

Case3 shows that the implemented solution works as expected.

# [Start copy here]
function(ExternalData_add_test_fixed target)
  ExternalData_expand_arguments("${target}" testArgs "${ARGN}")
endfunction()

function(ExternalData_add_test target)
  ExternalData_expand_arguments("${target}" testArgs ${ARGN})
endfunction()

function(ExternalData_expand_arguments target outArgsVar)
  foreach(arg IN LISTS ARGN)
    message("arg:${arg}")
  endforeach()
endfunction()

message("\nCase1 - Semicolon not escaped - ExternalData_add_test_fixed")
ExternalData_add_test_fixed(TheTarget --do --foo --bar --code "import foo; foo.bar()")

message("\nCase2 - Semicolon not escaped - ExternalData_add_test")
ExternalData_add_test(TheTarget --do --foo --bar --code "import foo; foo.bar()")

message("\nCase3 - Semicolon escaped - ExternalData_add_test_fixed")
ExternalData_add_test_fixed(TheTarget --do --foo --bar --code "import foo\\;foo.bar()")

message("\nCase4 - Semicolon escaped - ExternalData_add_test")
ExternalData_add_test(TheTarget --do --foo --bar --code "import foo\\;foo.bar()")
# [End copy here]


Associated output:

Case1 - Semicolon not escaped - ExternalData_add_test_fixed
arg:--do
arg:--foo
arg:--bar
arg:--code
arg:import foo
arg: foo.bar()

Case2 - Semicolon not escaped - ExternalData_add_test
arg:--do
arg:--foo
arg:--bar
arg:--code
arg:import foo
arg: foo.bar()

Case3 - Semicolon escaped - ExternalData_add_test_fixed
arg:--do
arg:--foo
arg:--bar
arg:--code
arg:import foo;foo.bar()

Case4 - Semicolon escaped - ExternalData_add_test
arg:--do
arg:--foo
arg:--bar
arg:--code
arg:import foo
arg:foo.bar()