AssetManager::assets_: asset_type ^ asset_id

AssetManager now stores assets with an AssetId key where the
AssetId::asset member has been XORed with T::asset_type, where template
type of object requested/provided, for example, to getBlocking(),
getDeferred(), or put().

This allows different types of objects to use the same ID to refer to
different objects, or for having different views of the same data in a
bed.  The only cost of this is that the number of potential hash
collisions is increased, but since collisions are still extremely
unlikely this is a good sacrifice.

In the old system, a collision-proof database is one where each asset in
the database "owns" its ID, and no other asset in the bed can have that
ID.  Under the new system, such collision-prevention requires each asset
to "own" any IDs which can be generated by XORing it's asset ID with the
asset type ID of any asset class that can be loaded using its asset ID.
For instance a texture asset can be loaded using StaticTexture,
ParamsAsset<TextureParams>, etc.  The plain asset ID does not need to be
unique bed-wide, but merely among other assets of the same type,
although it would be good to force plain IDs to still be unique to avoid
confusion for the user.  Eventually, bedit/beditor will issue a warning
if this is detected.
be::ParamsAsset<T>