Add PerformSearch SQL function

This accepts a query string and returns records for each card matching the query, with columns for each card's ID and the rank of its match to the query string
Create trigger to rebuild text search vectors

This will update the CardVectors table when any of a card's text fields change, so we don't need to rebuild the entire table every time. This also means we don't need the script that does this.