Implement raise from type checking

Fix #337 
I don't think the from_expr has to be a super type of the exception you are raising. It can be any exception.

From the [documentation](https://docs.python.org/3/reference/simple_stmts.html#raise):
> The from clause is used for exception chaining: if given, the second expression must be another exception class or instance, which will then be attached to the raised exception as the __cause__ attribute (which is writable).