Modify the runtime error system to allow attaching arbitrary additional
RunError objects to RunError objects. This is used to provide informative
messages that may be shared by various top-level error messages.

Added two new runtime error types, InfoCStdFunction, and
InfoCStdFunctionParameter, to demonstrate the changes.

RunError constructor now accepts a third parameter, which is a vector of
std::unique_ptr<RunError> objects to be attached as additional errors.

Added RunError::addAdditional(), which adds an additional RunError to an
existing error.

The RuntimeError event has changed:
 - ArgumentCount is now a uint8_t (previously uint32_t).
 - Added uint8_t AdditionalCount, which describes the number of additional
   runtime errors for this error.
 - Added uint8_t IsTopLevel, which is true if this is a top-level error.

The unicode formatter for runtime errors, format(RunError const &), will now
format all additional errors that are attached to the argument, adding each
formatted string as an additional line following the primary error message.

Changed several methods to accept a const reference to a RunError object,
rather than a std::unique_ptr<RunError>.

ThreadState::addEvent(EventRecord<EventType::RuntimeError> const &) will only
add the event if it is a top-level runtime error.

Updated deserializeRuntimeError() to also deserialize and attach all
additional errors.

Updated TraceThreadListener::handleRunError() to correctly serialize RunError
objects with additional attached errors.