Add proper virtual keyword
Currently, the implementations of (pure) virtual functions do not carry the virtual
keyword. This is prone to introduce bugs and also requires copy-paste/duplication in the bindings. We should add the virtual
(C++98) or override/final
(C++11, once switch confirmed) keywords.