(TK-18) Improve implementation of `service` macro

This commit changes the implementation of the `service` macro so
that rather than building up the prismatic graph of functions
first and then reifying the service instances as wrappers around
the graph, we instead reify the service instances first and build
the prismatic graph functions as wrappers around the protocol
instances.  This makes the services look and feel much more
like "normal" protocol reifications; it should alleviate some
of the strange compilation errors that we'd occasionally get
when trying to call functions from the `Service` protocol, etc.

The only API change is to remove the `service-constructor` function
from the `ServiceDefinition` protocol, which shouldn't have many
external implications since this function was an internal implementation
detail.
(TK-18) Fix up errant comment
(TK-18) Remove duplicate precondition
Merge pull request #161 from cprice404/scratch/master/TK-18-protocol-instances-in-graph

(TK-18) Improve implementation of `service` macro
(TK-60) Formalize public function for loading config

If users want to write a command-line tool that doesn't make sense
to boot the full trapperkeeper framework for, but they still want
to leverage trapperkeeper's configuration data, they should be able
to.

Prior to this commit, it was technically possible, but the function
you'd need to have called were marked as private and named poorly
for a public API.  This commit simply formalizes a public `load-config`
function, that users can call w/o needing to boot the full TK
framework.
(TK-60) Add docstring to load-config fn
Merge pull request #162 from cprice404/feature/master/TK-60-provide-public-load-config-fn

(TK-60) Formalize public function for loading config