Ok, so back to one of the original questions: How difficult would it be for a well funded group to fork bitcoin and change the total coins generated and the rate of generation? Was the 21M coins arbitrarily chosen by Satoshi or is it the outcome of optimizing the algorithim?

In my understanding, the total number of bitcoins, which can never quite reach 21 million, is a by product of how the generation process works and not arbitrarily chosen. The design choice of halving the reward every so often significantly limits the total. Not because there cannot be more bitcoins, as there can, but because there cannot be twice as many bitcoins. If the reward started at 100 bitcoins and halved every four years (or so) for 124 years, the total number of 42 million bitcoins, with the eight decimal points of divisability, would overflow the 64 bit register intended to keep track of them all. I don't believe this would actually break the blockchain, but if any single address were to ever be able to aquire enough of the bitcoins into a single integer, all hell would break loose, so it's just better to eliminate the possibility altogether.

The actual round number of the reward is somewhat arbitrary, I believe, since 50 is not a round binary number; but the halving is done by a single bit shift of a binary integer. For example, the 50 bitcoin reward is represented in the blockchain by the binary number...

100101010000001011111001000000000

While the first halving, in a few more years, to 25 bitcoins will look like....

10010101000000101111100100000000

And the next halfing of 12.5 bitcoins will look like...

1001010100000010111110010000000

Each number just being the prior number without the final bit. This process repeats every four years or so until the final 1 bit is lopped off, and there is nothing left of that number but zeros. The 64 bit integer that represents the total issue of possible bitcoins is converted to decimals and decimal point is then added in the middle of the total interger so that human minds can wrap their heads around such numbers.

That is my understanding, which is likely wrong somewhere. In which case, I would love for any of the programmers to correct my misunderstandings.