This also fixes C++ compat: no forward declaration of friend classes (OSX compilation) and C++98 compat (enums are not classes e.g. ActiveState)