Prevent overflow when computing Mid in binary searches.

library/array.m:
library/bt_array.m:
    As above.
Print formatted dates and durations with io.print.

Change the io.print family of predicates to print out the formatted version of
dates and durations rather than their underlying representation.

library/io.m:
library/stream.string_writer.m:
	As above.

	Avoid a change of tense in the middle of the descriptive comment
	for {io,stream.string_writer}.print.

tests/hard_coded/Mmakefile:
tests/hard_coded/print_date.{m,exp}:
	Add a test for the above.
Fix a bug in io.print_line/{4, 5}.

library/io.m:
    In the above predicates the trailing newline should be written to the
    specified stream, not the standard output.
Overflow in string-to-float conversions.

The behaviour of string.to_float/2 is not currently consistent between backends
when the conversion overflows.  The C and Java backends return infinity or
-infinity, while the C# backend fails.  Fix this by specifying that
string.to_float/2 should return infinity or -infinity on the conversion
overflowing and modify the C# implementation to do this.

library/string.m:
	Specify what happens when string.to_float/2 overflows.

	Address the XXX in the C# implementation of string.to_float/2:
	we need to catch System.OverflowException.  If we do catch
	it then return +/- infinity as appropriate.

	Fix a typo: s/Formating/Formatting/

tests/hard_coded/Mmakefile:
tests/hard_coded/string_to_float_overflow.{m,exp}:
	Add a test for string-to-float conversion overflow.
Fix a bug with io.write_float/4.

In the Java grade io.write_float/4 was incorrectly printing infinity as
"Infinity" and -infinity as "-Infinity".  (io.write_float/3 implemented
the correct behaviour.)

The recently added string_to_float_overflow test case also acts as
a test case for this.

library/io.m:
    Make io.write_float/4 print infinities correctly.
Address review comments from Paul.

library/string.m:
    As above.