The WT_SESSION::begin_transaction call can be heavyweight, particularly if the cache is full. Applications may need locking in order to allocate timestamps, so it would be preferable to decouple starting a transaction from timestamp allocation.
WT already has WT_SESSION::timestamp_transaction for setting commit_timestamp, extend it to also support setting read_timestamp.