Implement component directives, mostly.

Component directives get replaced with their own template, populated using
their controller as a scope.

Eventually they ought to support wrapping their original contents in
template, but that's not yet supported yet since it requires an invasive
change to the link function interface.