Customize product and variant mappers in api, and refactor apis
Refactor front api to make it real switchable

- Because of the way we register the api instances, the original implementation is actually not switchable, so now we only register the entry api to make it switchable
- Add ApiContext so each api can access the site information easily
Rename API to Api to follow the convention made by .net framework