Initial code commit
Allow DateTime in metadata.
Various fixes

StreamInfo contains the information about a metadata stream and
the offset calculation.

Made BlockMetadata's dictionary public and the Write() return a
StreamInfo and only write metadata if it has any.

Block is now a class to avoid offset issues, shouldn't affect
performance too much. Write() takes a BinaryWriter rather than
a Stream.

Requirement for a struct dropped from TBlockType in Chunk<,>

Chunk<,> initializes all blocks up front.

Properly handle the setter's translation from world-space to
chunk-space.

Chunk<,>'s Write() method uses a BinaryWriter rather than a Stream
Fix chunk loading for negative co-ordinates.

A negative number divided by a negative number is negative, except
when it's an integer and rounds upwards.

Given the x co-ordinate of -64 and a chunkHeight of 128

-64 / 128 == 0
-64 / 128.0 == -0.5
Floor(-64/128.0) == -1

The fix is to floor a division by a floating point number.
Reimplement union-like behaviour for BlockData

BlockData is composed from BlockId and BlockMeta and used when
writing to file, a small memory optimization would be to drop the
BlockData as a field and introduce a method to combine the two.

Setting BlockId or BlockMeta appropriately sets their values into
BlockData.
Behold the power of Modulus!

The remainder of the division of the x/y over the chunk dimensions is
the location of the x/y in the chunk.
Adding missing files and unit tests, remove program stub.
Remove Program.cs from the project.
Rename test file, Class1 -> BlockMetadataTests
Make the block metadata offset a long

We can handle the memory hit I suspect.
Add very simple garbage collection of chunks.

Given a start position and a range, it clears out a square block
of chunks. Useful for unloading a region.
Add unloading support to Map

Adds various options for unloading chunks, broadly divided into two
categories: Expiration and Area and intersections between them.
Remove Tag offset data from the block.

There's a dependency on writing the metadata before
the the block so that the block knows where in the metadata
file it's tag data is.

Easier to use a metadata index file.
A few changes for the sake of I/O

Block gets an Interface, IBlock, defining a minimum set of
require properties for any block.

IDeserialize<T> defines the Read(BinaryReader) method to return
the object, either the mutated object or a new version.

Chunks do not store Entity information anymore, users will need
to serialize their entities separately and provide memory storage as
required.

IEntity is gone as nothing requires it.

Metadata will be serialized to a separate file. (Work in progress)
Fix a typo.
Remove IEntity from project
Add missing file for Map tests
Resolve #1 - Map Distance Function

Provides a centered distance function that will cross the boundary
when range includes negative co-ordinate chunks.
Fix for negative co-ordinates translation world->chunk
Fix for trying to modifying an enumerable while iterating in Map.

Also refactor the indexer operator on Map