is_* functions still return true on is_404() pages

Description

If you use is_single(), is_day(), is_month(), is_year() etc in your theme to show/hide things conditionally, the don't work as they should for 404 requests. So if ​http://site.com/2004/04/02/bad-title does not exist, is_404() will be true, but so will is_single()

If a page is 404, it can't be anything else. Even if it looks like it is formatted like a permalink page, it's not a single page. It's a 404, period. The logic should be changed so that if is_404() is true, every other "is" is false.