[Extensions] Add SetExtraJSEntryPoints to Extension C API

This will allow for Extension to inform if they have other entry
points (apart from the implicit extension_name), that should cause
the extension to be loaded.

For example, let's start with an extension named 'xwalk.sample' that,
for whatever reason, needs to have a function in the 'xwalk' object,
let's say 'xwalk.SomeFunction'. The extension would need to use this
API to tell that it should also be loaded when 'xwalk.SomeFunction' is
accessed, if we want our load on demand functionality to work.

An additional internal API header is introduced to keep this new API
contained, until this idea is proven.
[Extensions] Verify that the entry points are valid names

Also make sure that there aren't any extension already registered
with clashing names (or entry points).

We re-use the function that used to validate extension names to validate
entry points as well, so we rename it to something more appropriate.

All the symbols "exported" by an extension are kept on a std::set, so we
can re-use this Set when testing the extension name.
[Extensions] Add tests for conflicts between extensions

This adds for when an extension adds an entry point for an object
that belongs to another extension, either the extension name or
via entry points.