Add support for BEGIN TRANSACTION READ ONLY
This PR adds support for starting read-only transactions using the following syntax (also supported by Postgres):
BEGIN TRANSACTION READ ONLY;
Standard transactions in DuckDB start out as read-only, and are promoted to write transactions when the first write is initiated. Read only transactions by contrast can never be promoted to write transactions. Instead an error is thrown when a write is attempted.
Force Checkpointing
The FORCE CHECKPOINT rework in https://github.com/duckdb/duckdb/pull/12061 prevents transactions from starting as new write transactions can block the FORCE CHECKPOINT from happening, leading to unfairness as the new transactions would gain priority over the existing one, and potentially leading to the FORCE CHECKPOINT never completing.
With READ ONLY transactions, we know they can never become write transactions, as such they will never block the FORCE CHECKPOINT. As such, these transactions can still be started and do not grab the same start_transaction_lock.