Hook for VM code to force writing a constant property.

A property registered with

    vm->getPropertyRegistry().registerConstantProp(...);

can now be modified by C++ code using

    vm->getPropertyRegistry().put(..., /* forceWriteConstantProp = */ true);
Added a property 'gc.watcher' bound to unit at every GC.

{Property.get 'gc.watcher'} returns a read-only variable
that will be bound to unit after the next GC.

This provides a very simple means to execute code after
the next GC, e.g., using this procedure definition:

    proc {AfterNextGC P}
       thread
          {Wait {Property.get 'gc.watcher'}}
          {P}
       end
    end
Added a WeakReference data type.

The builtin module WeakReference provides three builtins
to work with weak references.

{WeakReference.new X ?WR} creates a new weak ref for X
{WeakReference.is V ?B} tests whether V is a weak ref
{WeakReference.get WR ?Y} deferences the weak ref WR.

During garbage collection, alive weak references do not
keep their underlying value alive. If the value is still
alive through strong references, then the reference is
updated. If the value is reachable only through weak
references, it is dead, garbage collected, and weak
references pointing to it are invalidated.

{WeakReference.get WR ?Y} returns some(X) if the value
is still alive, and none if it has been garbage collected.
Implemented System.postmortem.

It derives straightforwardly from WeakReferences and
the 'gc.watcher' property.
Use std::atomic values for inter-threads fields of VM.

The three flags that can be set by the external world
(preempt request, exit-run request and GC request), as
well as the global reference time, are now implemented
with C++11 atomic values (instead of 'volatile', which
as at best a poor substitute).
Fixes #45: WeakDictionary is missing.

This commit implements WeakDictionary. As was agreed
months ago with P. Van Roy, this implementation has
post-mortem semantics, whereas Mozart 1 had pre-mortem
semantics for WeakDictionaries.

This means that instead of sending Key#Value to the
stream when Value is about to become dead, we send
Key#unit to the stream when Value is dead.
Update README.MacOS.md

Add make install.
Merge pull request #60 from necrodome/patch-1

Update README.MacOS.md
Added rt as a target-link-library of ozemulator.
Fixed emacs_mode build with cross-filesystem builds.

If the source code and the build directory
are on different file systems, the previous
build script for emacs_mode would fail.

This commit fixes that issue.
Merge pull request #59 from sjrd/issue/fix-45-weak-dictionary

Fixes #45 with WeakDictionary (and Finalize.postmortem)

checks out but I need to submit the test suite now that the sub-modules are merged.
Merge pull request #53 from sjrd/enhance/atomics

Use std::atomic values for inter-threads fields of VM.
Merge pull request #61 from sjrd/issue/build-script-fixes

Two small build script fixes
`make package` fails on Mac OS X as CPack PackageMakerGenerator 
expects files with suitable extensions.
Merge branch 'master' of https://github.com/mozart/mozart2