What did getmemorypool do? To speak the truth, I don't really know what getmemorypool did before, I'm having a hard time trying to figure out.

And why is getmemorypool obsolete? What replaced it for internal work generation?

I don't find much documentation about it in search engines.
getmemorypool gave you the data needed to construct your own mining work and make a valid block. It was/is frequently used by mining pools for generating work for miners. It could look like this:

&gt; bitcoind getmemorypool
{
  "version" : 1,
  "previousblockhash" : "00000000097f17d16fee37a160d300e27ce13632bb4468f0f31ae816e6186a18",
  "transactions" : [
  ],
  "coinbasevalue" : 5000000000,
  "coinbaseflags" : "062f503253482f",
  "time" : 1350541369,
  "mintime" : 1350537485,
  "curtime" : 1350541369,
  "bits" : "1c2f36c0"
}


Normally transactions would be a long list of transaction data.

getmemorypool is no longer supported in bitcoind since version 0.7 which has getblocktemplate instead. getblocktemplate is more flexible and suitable for pool mining. It is now in use both for getting data from bitcoind and for miners to get work from pools.