Add `common.ToServiceName()`.

`ToServiceName()` normalizes service names, replacing the ad-hoc logic
in the IR protocol helpers. Non-printable ASCII characters are now
dropped during normalization.

* IR: Remove `ServiceHelo.Service()`.
* OR: `ServiceHelo.Service` => `.ServiceName`.
IR: Refactor connection handling.

* Consolidate the `NodeConn` and `ServiceConn` interfaces into the
  `Conn` interface. Remove `NodeConn.Outgoing()`.
* Remove `Conn.Version()`.
* Define `Conn.Requests()` and `Conn.Replies()`.
* `Service.Incoming()` => `.Requests()`. Add `Service.Replies()`.
* Change the `Router.{Add, Remove}ServiceConn` signatures. The service
  name is now managed by the router, not the `serviceConn`.
* Expose the `service` struct as `Service`. Remove the `Service`
  interface.
* Remove `Service.Name()`.
* Calling `Service.RemoveConn()` no longer closes `serviceConn.errChan`.
  The router will close the channel once the connection has been removed
  from the service.
* `Service.Spool()` now returns a Boolean indicating whether the request
  was successfully spooled. `Service.spoolOrNack()` attempts to spool
  requests and replies to the router.
OR: Remove the `ServiceConfig` struct.

The `MaxBatch` setting for the CN API specifies the size of the
outgoing request buffer. This should match the CN's `MaxBatch`
setting.
OR: Document `{node, service}Conn`.
OR: Manage the `maxBatch` for each `nodeConn`.

* `Router.AddNodeConn()` now accepts the `maxBatch` as the second
  parameter. The `nodeConn.maxBatch` field is only accessed by the read
  loop.
* `NodeInfo` => `nodeInfo`. Add a corresponding `serviceInfo` struct.
* `nodeInfo` now stores the pending request count in the `currentBatch`
  field.
* When a CN connection accepts a request for delivery, its pending count
  will be incremented. Connections that exceed their `maxBatch` will be
  skipped when routing requests.
* Receiving an ACK for an outstanding request will reduce the CN's
  pending request count.
* Typo: Use `reply.Id()` when looking up the request for an ACK.
OR: Change the `Router.AddServiceConn` signature.

* `AddServiceConn()` now expects a service name as the second
  parameter.
* Define `Router.SetConnStatus()`.
OR: Ensure `c.Router.SetConnStatus()` is called.
OR: Clean up protocol interfaces.

* Define a `Change` interface for `ConnChange` requests.
* `ReplyWith(status)` => `ReplyFrom(connId, status)`.