Component tests

We're just getting the working code out there to iterate upon. It will be a few days before this becomes a PR against master, but it's starting to look good thanks to @smothiki and @carmstrong pounding on it.