[SystemInfo] Decouple SystemInfoContext with the multiple system info sub classes

Old SystemInfoContext hosts different systeminfo objects as private members(cpu_, display_, etc), 
the issue is we need use lot of if-else to identify which member should called for same functions like 
Get, StartListening and StopListening. 

This change make all system info classes (CPU, DISPLAY, etc.) are inherited from abstract
class SysInfoObject- the interface with above common functions. SystemInfoContext register all system
 info instances in a map during InstancesMapInitialize, thus when there are commands from JavaScript, 
we can enumerate the map instead of using lot of if-else clauses.