Optional components in nodes using @optional attribute

Something else we needed - allows caching, avoid ugly if(e.has(Component)) e.get(Component);