[MAT-387] Use shared_ptrs everywhere

Instead of using the PtrContainer<const OGNumeric*> for arguments
and registers within expressions, we now use an
std::vector<std::shared_ptr<const OGNumeric>> for the registers.

This is a very large change, and a summary of the changes follows:

This obsoletes the PtrContainer data structures, so they are
removed.

This also complicates the dispatch mechanism for dispatching to a
Java array of arrays, so the visitors that implemented this are
replaced with two new classes, Real16AoA and Complex16AoA. Their
implementation is considerably simpler than the old visitors.

The removal of the DispatchToOGTerminal visitor is also possible,
but has been left for a future ticket (MAT-407). This would also
simplify the code, but this PR contains enough changes already.

In this commit we add typedefs for shared_ptrs of each of the
types. In most places we switch to constructing objects wrapped by
these types. However, this is generally fiddly and unsafe, so in a
future commit we will replace this requirement with factory
methods for all of the nodes.

Also in this commit is a change to the Windows build, to increase
the stack size, which is required for the entrypt BigTree test to
pass (its stack is smaller than Linux and OS X by default). We
also need a linker flag that exports all symbols - all symbols are
exported by default, but it seems that the inclusion of shared_ptr
explicitly marks a method as exported, which changes the default
to not-exported. Therefore, we use this flag to force all symbols
to be exported.

Methods of OGNumeric subclasses sometimes need to pass themselves
to other methods. However, interfaces to these other methods
usually expect a shared_ptr, and the this pointer is a raw
pointer. In order to allow objects to find a shared_ptr to
themselves, we inherit from the standard library class
enable_shared_from_this so that shared_from_this() can be called
to obtain a suitable shared_ptr. shared_from_this() only works if
there is already a shared_ptr to this. This requires that whenever
an OGNumeric is constructed, it must be wrapped in a shared_ptr
for its methods to work.

One problem with needing shared_ptrs to pass to interfaces is in
the constructor of the FuzzyCompareOGTerminalContainer
constructor, which needs a shared_ptr to the object it points to.
However, because an OGTerminal's FuzzyCompareOGTerminalContainer
is created during construction, it is not possible to already have
a shared_ptr available. In order to work around this, the
FuzzyCompareOGTerminalContainer belonging to an OGTerminal is now
initialised lazily instead.

Because the OGTerminal holds reference to its own
FuzzyCompareOGTerminalContainer, it is also important that the
FCOGTC does not hold a shared_ptr to its OGTerminal, because then
it would be impossible to clean up any OGTerminal due to this
cyclic relationship. To avoid this, we use a weak_ptr in FCOGTC.

Many new/delete allocations that are not necessary are removed in
this commit.
[MAT-387] sed replace all pOG{Numeric,Terminal,Expr}

Use ::Ptr types

[MAT-387] Run sed command correctly this time, fix up compilation errors

[MAT-387] Get rid of remaining pOG...
[MAT-387][WIP] Make terminal constructors private and provide factories

[MAT-387] Terminal factories - compiles but tests fail

[MAT-387] Fix RTTI by using constructors of subclasses

[MAT-387] Correct type of logical matrix by using correct constructor

[MAT-387] Reset shared_ptrs in jterminals test

This is so that they can be deleted whilst the JVM and environment
is still around for their unbinding.
[MAT-387] Make Expr constructors private
[MAT-387] Remove terminal methods that took a raw pointer
[MAT-387] Remove iss functions that take pointers
[MAT-387] Comment on terminal container
[MAT-387] Add some comments, delete some dead code
[MAT-387] Make some things const refs

Make things const where possible

[MAT-387] More const

[MAT-387] More const refs, simplify runtree cleanup

[MAT-387] Make more things const refs
[MAT-387] Reinstate disabled checks
[MAT-387] Fix up after rebase