What are static code analysis tools and how do they help developers detect potential errors, security vulnerabilities, and code quality issues before runtime, when should teams use these tools to maintain software reliability, and how can they improve code quality, security, and development efficiency?