extract several .hpp files from clay.hpp
"throw exception in context" statement

Like this:

```
throw GenericException("hi there") in ExceptionContext();
```
rethrow statement

Syntax is:

```
throw;
```

Can be used inside catch block. Rethrow statement preserves context
(file, line and backtrace of rethrown exception).

Unlike C++, throw; statement cannot be invoked from a function that
is invoked from a catch block.