Implemented a key and hash to BlitzGateway objects

Added a __key method to BlitzGateway objects
Used the __key method to implement __hash__ method
Refactored __eq__ to use __key
New __eq only uses object id to determine equivalence
Fix typo and return None for objects with no id
Implement hash to return object id as backup
Move backup id use to key rather than hash