I usually use a bunch of dired buffers. Dired is actually really nice--it's basically my main file manager these days. You can actually open several nested directories in a single dired buffer using i and you can open directories/files in a different window (in the Emacs sense) using o.
Another really useful trick is M-x find-dired and M-x find-grep-dired, which let you get a dired listing of the result of a find command. This is usually good enough for browsing through even relatively large code bases.
You can also use etags to get "jump to definition" commands for your various functions. Just put the TAGS file in the root of your directory.
Also, ido-mode really helps with handling a bunch of different buffers or files. And, since I have a large external monitor at work, I can have one or two small dired windows (again in the Emacs sense) open most of the time.
I use ido-mode for file browsing, and semantic for code browsing. etags will get you quite far, semantic-symref gets you the rest of the way (though you can use cscope instead, through xcscope.el). ECB can be helpful but I don't find I need it much anymore, and it's pretty out of date.
This may not be exactly what you're looking for, but I generally resort back to good old 'git grep / grep' when looking through unfamiliar github projects. running grep from emacs links all the matches to their corresponding files, so you can navigate the results and easily follow the code execution by jumping to each result.
There is speedbar, which can be tailored to look a lot like TextMate's panel. Personally, I use the command lines + vim if I'm mainly reading/browsing through code. I even use vim for minor edits, even though I use Emacs as my main editing environment.
I use a combination of tag search, ack, and glean (https://github.com/silentbicycle/glean), a search tool I've been working on. All three have good Emacs integration.
I use Emacs 99% of the time, but when I need to look through a codebase I'm not familiar with I use TextMate for its project panel.