Move EmptyComponent logic to instantiation helper

This cleans up the code a bit and also brings us closer to allowing any ReactNode to be rendered at the top level.

Test Plan: jest