Search for needle in haystack. Return the position of needle in
haystack or -1 if not found.
If the optional argument start is present search is started at
this position.
When haystack is a string needle must be a string or an int,
and the first occurrence of the string or int is returned.
When haystack is an array, needle is compared only to one value at
a time in haystack.
When haystack is a mapping, search tries to find the index
connected to the data needle. That is, it tries to lookup the mapping
backwards. If needle isn't present in the mapping, zero is returned,
and zero_type() will return 1 for this zero.