Fix Mac build.

- Virtual methods needs to go in the cpp files (Chromium style).
- <hash_set> is not standard thus in clang it's in ext/
This looks weird. I don't think we should be including `hash_set` directly at all -- `base/hash_tables.h` has all the logic to handle the different locations and namespaces where `hash_set` is defined.

@pozdnyakov, do we really need a `hash_set` here instead of an STL data type?