What is immature_balance?

When I run getwalletinfo, there are three balance fields. What does each one mean? And how does one transition to another?

As in:

./src/zcash-cli getwalletinfo
{
    "walletversion" : 60000,
    "balance" : 0.00000000,
    "unconfirmed_balance" : 0.00000000,
    "immature_balance" : 4.50500000,
    "txcount" : 2,
    "keypoololdest" : 1474750513,
    "keypoolsize" : 101
}

After mining a block, the reward is marked ‘immature’ until 100 confirmations, then those transactions are marked ‘generate’. I’m not so sure about ‘unconfirmed_balance’ or how many confirmations are required but it’s probably to do with other user transactions.