Refactor: Added C++ HEdge class

Also, removed runtime_mapdata_header_t from Surface, as it seems that
it is not a proper MapElement type but rather some kind of a
sub-element. Anyway, the header wasn't apparently being used for
anything (?).

Todo: Scour the code for illegal/forced/unnecessary casts and switch
to de::MapElement* instead of void*.