Our small dev house uses Harvest: http://www.getharvest.com/
It's simple, straightforward, and has a metric ton of ways to enter hours into the system. It doesn't have all the things you're looking for, but it does well for all our vacation/hour/billing/tracking needs.