Beginning of mass rewrite, dynamic methods, properties, see full summary

Yes, I feel terrible for such a huge single commit but it must be done

Changes (mostly complete)
=========================

New and more efficient http downloader, dict-like container that automatically fetches when needed.

Dynamic method builder

Remove old and badly designed *_request base classes

Optimize kill rank builder for items, remove regexp search and do intelligent sorting based on attribute name

Made everything that needed to be properties properties! Only a few getters are remaining

Made quality and attribute maps a little more efficient and added method to transparently convert ID to names and vice-versa

Renamed some methods to something more proper, including get_attribute_definition -> _attribute_definition,
removed _get_attribute_id_for_value

Added _quality_definition (similar change to _attribute_definition)

Updated iterators to be compliant with the spec (rename methods that needed to be to next())

Removed sorting where it wasn't needed, items are now built as iterated/getitem'd instead of
all of them being built at once in deserialization

Removal of tf2, tf2b, p2, d2, and d2b modules. What workarounds were needed are now in the base classes,
which now use app IDs directly instead of vague module globals. The deprecated golden wrench
API was also removed.

Removed item_type parameter for schema (not needed due to removal of afore mentioned modules)

Made item.quality return a tuple instead of dict in the form of (id, name, localized name)

Removed get_equipped_classes, not needed and inaccurate due to dynamic slots. Use item.equipped

Added item.icon and item.image to replace get_image, icon is the small thumbnail, image is
full size

Renamed item.class and attribute.class into cvar_class, which is less ambiguous

In addition to afore mentioned property changes, is_untradable and is_uncraftable are now reversed
to the less-confusing and simple item.tradable and item.craftable

In addition to afore mentioned property changes, item.get_full_name is now item.full_name, which
no longer uses a prefix dict (the user can simply strip off "The " themselves) and is a little bit
smarter in how it generates names, including not including "Normal " in front of an item.

Removed get_origin_id (wasn't really used, may add property later)

Made schema to inventory item attribute merge a bit smarter, no longer merges attributes that are already there

In addition to afore mentioned property changes, added __getitem__ to inventory to allow inventory[id] calls.

As with the schema iterators, the inventory iterator now also creates items as items are retrieved instead of iterating
through the entire inventory and building them all at once. Also removed item_type for similar reasons as above.

Simplified asset_item, removed special behavior (and parameter) for special single-prices only. It doesn't make much
difference in size and speed, and is less consistent. Sorry Wind. You'll just have to change a line or two. As with
schema and inventory, items are created as iterated or fetched.

Renamed user_ugc to the more appropriate ugc_file, also removed the unneeded and unused user ID parameter.

Changed some requests to try harder to return something useful even if errors happen.

Renamed "backpack" classes to the more appropriate "inventory"

Changed sim backpack_context.get_app to inventory_context.get

Made sim.inventory a little more closely matched to items.inventory, also added __getitem__ for inventory[id] calls

Made sim.inventory ctor parameter order (app, then user)  match items.inventory's. Note that the same objects will not work
sim.inventory still requires an app dict

Removed a bunch of stubs from sim.item_attribute and instead made items.item_attribute more robust in how it deals with
missing data

Removed stubs from sim.item and made items.item hardier, note that schema_id can and will return None

Overrided tool_metadata property in sim.item to expose app_data

Made sim.item.quality more intelligent (will return default normal quality tuple if none are found, but tries to take the quality from
sim.item.tool_metadata if it's there)

Added sim.item.icon and sim.item.image, similarly to items.item

Removed stubs from sim.item and items.item

Removed sim.item_schema entirely, not used or needed

Simplified vanity_url, made id64 a property

Replaced get_avatar_url with avatar_small, avatar_medium, and avatar_large properties

Made steam.user.profile.current_game a tuple of the form (app ID, server IP:Port, extra info/name)

Made steam.user.profile.location return a touple of (state code, country code)

Replace ugly path stripping code in steam.user.profile ctor with simple strip call and basename