Add 'Safe Bool' casts to owned_ptr<T> and owned_array_ptr<T>.

Classes now derived from _SafeBoolBase to prevent implicit comparison
operators between returned _SafeBool objects.

Defining comparison operators for owned_ptr/owned_array_ptr classes
doesn't have any sense due to unique ownership of underlying pointers;
such operators would mislead users, thus they were prohibited.
ContextSwitch -- switching the context to another session.

ContextSwitch object *must* be auto (on the stack) variable.

If a given session as the parameter to ContextSwitch constructor
has ever been started, the 'kernel' method will return non-NULL pointer,
even if that session is about to stop, or already stopped.

If the switch is successful (kernel() returning non-NULL),
effective kernel()->context() is characterized by:
- type() being EventContext::CALL, and
- state() name ".switch".

Obviously, the session reference must represent valid Session object.
It's easy to assure if the _given_ session is e.g. an ancestor
of the _current_ session.