[BUGFIX] EXT:felogin: Multiple bugs with preserveGETvars

Refactor and fix handling of preserveGETvars in felogin.
 * Add support for multi dimensional arrays
 * urlencode() values
 * Preserve only parameters defined in 'preserveGETvars'

The patch adds a new ArrayUtility method to handle
recursive array intersections. See the unit tests for details.

Change-Id: I90e2f8eb79586369a9c15c7ef19f7658b1d65ed3
Fixes: #19938
Fixes: #23324
Fixes: #23649
Fixes: #36894
Fixes: #38589
Releases: 6.0, 4.7
Reviewed-on: https://review.typo3.org/16452
Reviewed-by: Markus Klein
Reviewed-by: Wouter Wolters
Tested-by: Wouter Wolters
Reviewed-by: Anja Leichsenring
Tested-by: Anja Leichsenring
Reviewed-by: Christian Kuhn
Tested-by: Christian Kuhn