Implement `@return` and first half of enabling the self keyword

Also refactor implementation to be much neater and include a
Rule class instead of mysterious private functionality in the
Funnel class.