Hey Bharat,

Again, it's nice to see we're pretty much on the same page here.  I spent quite awhile scratching my head over more-or-less the exact same questions before putting out the pull request... :-).

One of the things I was trying to do was be consistent with ORM syntax.  This makes Kohana's ORM documentation (which is surprisingly good on this subject!), the ORM code itself, the module's non-item model, and the module's item_relationships events consistent.

For example, with underscores, I debated removing them (and did so in a couple drafts) but left them so that the two instances they'll code up look the same.  For example, in Model_Tag, we have:
  protected $_has_many = array("items" =>
    array("through" => "items_tags", "delete_through" => true, "track_changed_through" => true));

Then in tag's item_relationships event, we have:
$relationships->_has_many["tags"] = array("through" => "items_tags", "delete_through" => true);

In the same spirit, I don't think we should change it to something like this:
$relationships->_has_many["comments"] = 1;
... as it would be a big exception to the otherwise Kohana/ORM-consistent scheme.

All that said, I think I'm reconsidering the item-specific vs. model-generic aspect... although not required *now*, you're right that changing it to model_relationships is more forward-looking and cleaner.  For example, a comment-change-tracking module could keep database entries of comment changes, and give comments a has_many relationship with ease.  Also, this makes it easier to do things like ditch underscores and keep syntax consistent.

So, for tag, we'd have something like this:
static function model_relationships($relationships) {
  $relationships["item"]["has_many"]["tags"] = array("through" => "items_tags", "delete_through" => true);
  $relationships["tag"]["has_many"]["items"] = array("through" => "items_tags", "delete_through" => true, "track_changed_through" => true);
}
(...where $relationships is an ArrayObject)

Then, we'd move the guts of the event-running code to the ORM override.

Alright, I'll take a stab at this...