#TODO: * header name should be case-insensitive * HttpRequest.capture() handle improperly formed request * HttpRequest.capture() handle running out of stream * Throw exceptions for unknown http methods * Router throws exceptions for not found or method not allowed * RequestDispatcher that calls router and catches exceptions