The default keypool is set to 1000. What does it mean exactly? That I have a pool of 1000 keys/address to use?
It means that 1000 keys have been pre-generated and added to your wallet. If you restore a wallet backup, any keys that you had used that weren't marked as used in your backup are likely still in your backup's keypool. So when you restore it, the keys are already there and it knows to look for transactions related to those keys.
Even though Bitcoin Core uses BIP 32 HD wallets, it is not guaranteed that the software will be able to find all of your transactions if they keys are not in the keypool. Thus it is better to have a larger keypool to make sure that all transactions are caught during a restore.
The keypool also lets you get keys (specifically public keys and their associated address) without having to unlock your wallet. If there were no keypool, every time you wanted a new address, you would need to unlock your wallet in order for new keys to be added.
If I reduce the -keekpool to say 20 the wallet size is drastically reduced from 1.5M to 50k. and loads much faster?
In theory yes since less data needs to be loaded.
Will I be able to add more keys later? or after I finish the 20 pool I must re-use addresses?
The keypool automatically regenerates keys when it is able to.
Is there any danger in a keypol of 20?
If you use more than 20 keys and then you restore an old backup, Bitcoin Core may not catch all of your transactions during a rescan. It is advised to keep the keypool larger than what you expect to use between backups.