Component::init() is not virtual anymore
Added a HasInit<T> checker struct to determine whether to call init() or not
Refactoring