Split @protocol into @protocol and @for and add __impl__(:for)

Fix for #1479.