[backend] Avoid busy-looping to get the the delay for call_out 100% right

It really kills the CPU, especially when you have a lot of open FD:s.

The closest 1ms is good enough, really, since it's not really possible
to guarantee anything better than that anyway (the time it takes to
run (e)poll() is rather varied, and usually in at least in the 0.1ms
range).
Explicitly define low_hashmem to be extern.

Otherwise there is one instance per .so-file, which was not intended.
Changed worst-case ordo of replace(array,item1,item2) from O(n^2) to O(n).

Replace uses search_array, which in turn calls
check_array_for_destruct.  So, if you had an array where all elements
were replaced by the replace containing at least one object replace()
was O(n^2), not O(n).

In general check_array_for_destruct is rather unneeded, since the
comparison functions already checks for destructed objects, but I
guess that it might cause objects to be free:d slightly sooner.
Changed ordo of array-({item}) from O(n log n) to O(n).

This especially helps when you have arrays with objects with `< and
`== operator overloading, where the constant is also changed
dramatically.

Also, it is now enough to have == operator overloading to get - to
work (given that there is at most one object in the array getting
items removed.)
Micro-optimizations for the http_time function
Optimized array*str when the array only contains one element.

It now simply returns the array element (if it is a string, that is).
The operation "empty_string += string" is now significantly faster.

This is rather common in code that works with buffers. Previously it
was, somewhat surpisingly, significantly faster to write code like:

  if( strlen( x ) )
     x += str;
  else
     x = str;

than it was to simply add the str to x regardless of whether or not x
already had contents.

Now the check is done in `+() instead. However, it still does not
handle things like "" + str + "", which might perhaps be useful, but
is significantly less common in real code.

str + "" was already handled.
Added a low-level wrapper for struct tm: System.TM

This can be used to do (very) simple calendar operations. It is, as it
stands, not 100% correct unless the local time is set to GMT, and
does mirror functionality already available in gmtime() and localtime()
and friends, but in a (perhaps) easier to use API.