*Overview
  Cover major features of the system and describe how it uses
  and improves traditional web technologies.

*Data Definition
  Define the format of:
   -Keys
   -Blocks
   -Directories
   -Files
   -Paths
   -Messages
   -Fragments
   -Programs
   
*Node Definition
  Describe the roles and responsibilities of nodes:
   -They provide an API to programs
   -Persitence of data locally and over the network.
   -Forwarding BlockTree messages and HTTP requests to authorized Programs.
   -Handling BlockTree messages from the network that are for the node
    itself.
   -Secure management of cryptographic keys using a TPM.
   -Forwarding traffic to other nodes.
   -Resolving node IDs to IP addresses.
    
*Network Definition
  -Mechanism to resolve node IDs to IP addresses.
  -Node hierarchy and leader election among peers.
  -Distributed Block locking for exclusive writes.
  -Opportunistic concurrency by default, with the rule
   that the last write known to the leader is
   the winner.
  -In order to participate in the network a node must have a valid TPM.
   The issuance of these TPMs is controlled to prevent inflation. When a
   TPM is first connected to the network it is claimed by the party who
   first registers it. The currency associated with that TPM is then transfered
   to the party.
  -Nodes store fragments for other nodes when they are paid. Two nodes create a contract
   store it in the public blocktree when they agree to do this.
  -Nodes can also create contracts to forward traffic for each other.

*Program API
  -Provide file creation API. Blocks can be created which are
   good for reading sequencially or good for reading randomly.
  -Provide binary file IO. The caller provides a plan-text
   Path and can open a block for reading, writing, or both.
   The API should stream based.
  -Provide stream wrappers for doing text IO.
  -Provide API for registering callbacks to be notified when blocks
   are modified.
  -Method to lock a block for exclusive write access.
  -API to register callbacks to handle BlockTree and HTTP requests.
  -A method to send Messages to other nodes and HTTP requests to
   other hosts.

*Applications
  -A distributed document database:
     Find or create a library for reading and writing BSON files and use
     it for storing data.
  -A web development framework which allows one to register middleware
   to handle HTTP requests. Provides Request and Response abstractions
   to middleware.
  -If time allows create an MVC middleware implementation.
  -A middleware implementation for serving static content.
  -A video streaming server.
  -An application for managing contacts.
  -A secure messaging and chat application.