test_safeptr_builtin.cl: more realistic, less buggy vload4
Use three arguments instead of a struct when manually writing safe functions

Instead of having a struct for each possible value we may wish to wrap
into pointer in C we use three pointer arguments to indicate the
limits. This way Clang generates code that resembles more the code we
generate for safe arguments, as getting the three pointers from a
struct record is a simple matter of using extractvalue.

As before the transformation is performed in two places:
transformSafeArguments transforms the arguments, which folds arguments
of form x*, x*, x* into { x*, x*, x* }, and in
moveOldFunctionImplementationsToNewSignatures which is given a list of
safe functions it knows to handle specially (by inserting three
ExtractValue instructions to the beginning of the entry block).

The test case has been updated for the new approach.