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 makes the inventory-loading asynchronous, and doesn't block until the bot attempts to use the inventory.  It affects both `Inventory` and `GenericInventory`, and shouldn't require any changes for existing `UserHander`s.

*(@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..