As far as the Mail side of things goes, I use Smart folders for doing GTD-type things. I also use a program called "Mailtags" (just Google for it). Mailtags lets me tag messages with additional information and I use this to assign a "destination" (such as @read review or @waiting for).
So, I set up a smart folder for each of my contexts (for example @read review and @waiting for). The smart folders will find any message with the appropriate destination (as set with mailtags) and make the message appear in that folder.
So, when I check by inbox, I go through each message doing the standard things (replying if < 2mins, deleting if not needed). If it's more complicated than a reply or a delete, the first thing I do is tag the message with the appropriate destination (@read review for example). Now, wherever that message goes, it will appear in my @read review smart folder. I then file the message in the appropriate mail folder (this will vary, but for a friend, it might just be a folder with that friend's name or for a project, it might be a folder with the project name - arranged in a way which makes sense to me - with hierarchies of folders, archived projects, standing projects, etc).
When I've emptied my inbox, all my messages will have been filed in the appropriate place, but will also appear in the smart folder which is relevant for their destination.
When I then go on to my "actioning" stage, I will go through the destination folders and do whatever is necessary there. This will usually involve removing the mailtag once it has been successfully actioned (e.g. completed or moved into my general GTD system) or maybe changing it (for example changing the mailtag so that it changes from @read review to @waiting for).
Hope this makes some sort of sense.