Improve error reporting for files that can’t be opened.
Replace some convoluted C string handling with simpler std::string usage.
Make recursive includes work.