refactor($compile): allow adding directive collectors and extractors

Refactor `$compile` so it is able to accept directive collectors and
directive extractors. Add all the current directive collectos and
directive extractors that handle the current operations