Replace implicit bool cast explicit empty() method

In C++11, we could use an explicit bool operator instead,
but that is not widely supported by compilers,
and the bool cast was not used outside of virtual.h anyway.

Fixes #153.