Add lazy loading to gem components

Based on #79, but using autoload instead of require_relative.