New 'tinysim' program to demonstrate the MGSim framework for non-Microgrid simulation projects.
Extend the tinysim demo.
New tinysim demo 'prodcons' using a producer-consumer pattern and a buffer.
New demo producer-consumer with receiver/sender interface.
Implement a singleton Simulator::Kernel.

Prior to this patch MGSim was structured for full encapsulation,
with the option to run multiple simulators side by side,
each with its own Simulator::Kernel insteance.

This patch introduces support for partial encapsulation,
where a single global Simulator::Kernel instance is
used if the code is compiled with -DSTATIC_KERNEL. This
avoids 1-3 memory lookups on all uses of a Kernel object.
This was tested to improve performance by 5-6% on current
hardware.

The fully encapsulated code is still available (-DSTATIC_KERNEL
not defined), and compiled as separate binaries libmgsim-dyn.a and
mgsim-dyn.
Add Emacs markers to automatically set c++-mode in headers.
Avoid unnecessary string copying for IIOBusClient::GetIODeviceName().
Avoid unnecessary string copying for IBankSelector::GetName().
Avoid unnecessary string copying for IFPUClient::GetName().
Avoid unnecessary string copying for IRPCServiceProvider::GetName().
Disconnect Object from clocks.

Initially (a long time ago) MGSim's kernel would run a cycle
handler on every cycle on every object. So each object had
its dedicated clock. However at some point the kernel
was updated to use discrete event scheduling, so the
simulation becomes driven by active storages. Since then
it is storages (and ports) that are related to clocks,
not simple objects any more.

This patch simplifies the code accordingly, by removing
the clock member of every object, and simplifying the
arbitration logic.

This patch results in 4-5% performance improvement
on current hardware.
Improve the Pipeline detection in Allocator.

Prior to this patch Allocator::ActivateThreads would use
RTTY on the currently active process to determine whether
the method is called indirectly from Pipeline::DoPipeline.

This patch creates a dedicated status bit in Pipeline
to report the same information. This drops the only
remaining dependency on Process::GetObject().
Improve the implementation of Simulator::delegate.

This patch generalizes Simulator::delegate into
Simulator::delegate_gen, to enable its reuse for other
callback signatures. This uses the new variadic template
syntax introduced in C++11. The special case is
still typedef'ed to "delegate" for convenience.

The "GetObject" service is removed, as it is not used
any more in MGSim.
Kill a compiler warning about a shadowed definition.
Replace uses of std::stringstream by std::to_string where appropriate.
Since exceptf<SimulationException> is the most common case, default exceptf<> to it.
Add some missing header includes.
Minor header include path tweaks.
Refactor the configuration sub-system.

Prior to this patch the file 'config.h' (and accompanying
'config.cpp') was becoming quite huge and serving too many
purposes. This patch spreads its functionality into different
modules and provides detailed documentation in comments.
Ensure the variable registry is properly encapsulated.