Reduce database size and variance of query response times.
The changes in this commit are mainly driven by the following database changes: - Fingerprints are no longer stored repeatedly as strings in the statusentry and exitlistentry tables but instead moved to their own fingerprint table and referenced by identifier. This is a step towards normalization that ideally reduces database size a lot by itself. - The statusentry table no longer contains the raw status entry but instead only those parts that are required for searching and displaying results. This includes nickname and exit information, where the former is not stored as string but as reference into its own nickname table. - There is a new table specifically for lookups which returns all relevant fingerprint identifiers for a date and an IP address prefix. The new search function based on this new table performs as little table joining as necessary and leaves some of the filtering and joining to the servlet. More details can be found in the exonerator2.sql file, which also serves as migration script from the existing schema to the new one. Implements #27356.