Restore a fix to handle_inst_var_subs_2.

A previous change improved the precision of inst matching by making
handle_inst_var_subs_2 recurse on the abstract unification of InstA and
SubInstB,

	Recurse(InstA, abstractly_unify_inst(InstA, SubInstB))

The change was temporarily reverted because it is susceptible to
infinite recursion when abstractly_unify_inst returns an inst containing
larger and larger "unify_insts" in each successive call.

compiler/inst_match.m:
	Restore the fix but avoid infinite recursion.

tests/EXPECT_FAIL_TESTS.all_grades:
	Enable invalid/constrained_poly_insts2 again.
Add a future data type for concurrent and parallel programming

library/library.m:
library/thread.future.m:
library/thread.m:
    Add new future standard library module.

NEWS:
    Announce the new addition.

library/thread.semaphore.m:
    Add an impure interface to thread.semaphore.m.  Semaphores are used to
    implement our other concurrency primitives and an impure interface can
    often be useful to implement things such as futures, which don't require
    IO state threading.  The impure interface predicate names are prefixed
    with "impure_".

library/thread.semaphore.m:
NEWS:
    Deprecate the impure init/1 function.

library/thread.mvar.m:
    Conform to changes in semaphore.m.

benchmarks/progs/mandelbrot/mandelbrot.m:
    Add future example to mandelbrot benchmark.
Add an impure_init/0 function to thread.mvar.m

This change renames the init/0 function in thread.mvar.m to impure_init/0;
deprecating the old function.  This makss this module more consistent with
thread.semaphore.m.

Remove the "mvar." prefix where it is unnecessary.

Add %----% separators between some definitions in the implementation
section.

library/thread.mvar.m:
    As above.