In playing with some of the large transaction / full block functional tests, I found some of the construction logic for large transactions to be a bit confusing. In particular, you could make a 'large transaction', but the actual size was not exact in any way, making more advanced testing harder to reason about. This change allows customization in number of outputs / size of output to add to transactions (via gen_return_txouts) and allows creating a tx with a particular target size simply with
def create_tx_with_size(node, target_vsize)
This allows much more flexible testing of certain scenarios, for example, easily filling the mempool to an exact size, with various size txs and fees (tx radius is size).

And from there, evaluating something like getblocktemplate selection:

There is a tests of this functionality in this commit but I was thinking to not include this in the PR because it's just testing what was added to test_framework. This tests was also used to generate the mempools above, and graphed with a draw mempool tool I have been working on.
I wanted to get feedback before possibly updating / adding more functional tests to use this kind of construction. @jnewbery @MarcoFalke ?