Load inventories asynchronously

A common issue when the Steam servers are overloaded is that the bot continuously times out at the beginning of a trade.  The reason is that the Bot is required to call `Trade.Poll()` every few seconds to prevent a timeout, but loading the inventory with `Bot.GetInventory()` is blocking - if the inventory takes too long to load, the Bot won't call `Poll()` in time.

This pull request attempts to load the inventory asynchronously, and doesn't block until the bot attempts to use the inventory.

*(@geel9 pointed out it would be better to simply not call any UserHandler callbacks until the inventory is loaded.  While this is true, there's no way to do that while retaining backwards compatibility - existing bots would need major code changes)*

**This pull request requires an update to .Net 4.5**.  Since [Mono supports 4.5](http://www.mono-project.com/Compatibility), I don't *think* that should cause any issues for anyone..