[[feature-objectuuids]] Add native support for object UUIDs to the engine.

This branch has four main parts:

1. e01edf2, 49736d0, 3cf5f8e, 17326ea: These add a UUID field and accessors to `MCObject`, and some convenience functions for working with UUIDs and altids.

2. 39dc486, 1211602, 798826d, 3fd1c1c: These give stacks the capability to cache object UUIDs in a hashtable for quick lookup.

3. 8232a11: Add searching for objects by UUID.

4. 563c8dc: This adds an `ObjectID` class that represents various different ways of identifying classes. They can be concrete (permanently associated with one specific `MCObject` instance) or delayed (they contain the identifying information, and go and find the appropriate object on request).

There were also a couple of bugs found by @runrevfraser during code review.