Always remove the checked param even on errors

Rework the flow of the validate function, so we always do the unset
of the param in the request array.
This still keeps the validation error detection, but avoids to mark
those erroneous parameters as not existent.
Properly detect empty values
Take some functions out of the App class

redirect and the keep_* functions family are generic and independent
enough to be used outside of the App class.
'string' makes PHP crash