Convert findOrCreateComponent to take Class instead of String types

Now instead of findOrCreateComponent('web'), it's
findOrCreateComponent(Web.class) which returns Web instead of the
generic Component. This improves usability from the Java side but also
makes it explicit what interface the thing you ask for will conform
to, since you pass that interface in.