[common] Create C++ wrapper to replace ExtensionAdapater
Current ExtensionAdapter ends up merging the concept of extension and
instance (before called Context) together, and this causes confusion
understanding the execution of the code.
The new approach is to create a C++ pair of classes that represent
Extension and Instance. This mimics what we have inside Crosswalk, and
also is pretty much the same approach PPAPI constructs its C++ API as
well.
One nice consequence is that the subclass of Extension can be used to
store objects shared by all instances -- since it have the correct
lifetime. We can get rid of most ad-hoc singleton implementations in the
code.
One downside is that we resort to virtual methods in this new
approach. Even though the overhead is low, if this proves to be a
bottleneck for a specific extension, it's easy to fallback to using the
C API directly instead of the convenience.