EnableIf and DisableIf back in place, type trait fixed for MSVC. Bleh, this is a lot of work. Removed `functional` header, because nobody's using it.