Add ApplicationID
Add ModuleID
Add FunctionBlockID
Replace UUIDs with different classes

We use UUIDs in a lot of places. I’ve created specialised *ID
classes that are used to identify

* FunctionBlocks
* Modules
* Applications

This way you can no longer pass the wrong kind of ID to any function
and Maps from IDs get a lot easier to understand (as they’re now
Map<ModuleID, Foo> instead of Map<UUID, Foo> which could have been
for FunctionBlocks or Applications).
Make sendValue in Application private
Remove sanitizedSendValue
Fix bug in Application.startBlock
Make send/receiveValue use InputDescription
Add getters to BlockDescription
Rename doInit to initInternal

doInit made it sound like it was executing init() (which it was
originally, but that has long since changed)
Rename joinApplication to createNewApplication
Make createNewApplication throw IllArgEx

createNewApplication will now throw an IllegalArgumentException
if it is called with an ApplicationID that is already in use.
Remove unused method from ModuleInfo
Remove unused constant
Extract interface from AddressBasedServerConfig
Change return type in TCPUDPServerManager
Make ModuleMain use a ServerManager
Make ServerManager return FutureNotifiers
Change behavior of BlockTypeHolder.getChildren()

This method will no longer return null if the BlockTypeHolder is
a leave. The method is now guaranteed to return non-null values.
Make ModuleBlockManager build Map itself