Run clang-tidy modernize-use-override to remove all the redundant
virtual keywords from overridden methods, and add some missing
overrides.
Another benefit is that this has also added the overrides
on destructors, which will cause a build failure if a base
class is missing a virtual destructor.
These are implementation details only, and should not be
part of the stable API.
We need the flexibility to change these at any stage without
being bound by any API contract.