Search API cleanup

Introduce search_api_interface and search_api in order define the full functionality and capabilities of a Search API.  Simplify the extending classes in order to improve the code reusability and readability.

Don't merge yet, I'd like to address SimpleMachines#1563 first.