Initial working version of new API in `experimental` namespace
Remove original services/services_test

Preparing to replace them with the ones from `experimental`
Rename services/internal files from experimental
Refactor to get tests passing, add a bit more functionality

This commit is largely just to refactor the rest of trapperkeeper
to work with the new API.  Involves a few other noteworthy
changes:

* Add support for multi-arity protocol functions
* Move app protocol to its own namespace
* Give app protocol some lifecycle functions so that
  in can be used from a REPL session
* Save a reference to the app object when running via `main`,
  so that it can be accessed via nREPL
Refactored bootstrap API

This refactors the bootstrap api a bit so that it's more user-friendly
for developers who want to use the 'reloaded' pattern.

Specifically, there are now some 'boot' functions in the 'core'
namespace that serve as alternate entry points; they are:

* boot-with-cli-data: allows caller to handle cli parsing on their own
* boot-services-with-cli-data: allows caller to handle cli parsing
   and loading of ServiceDefinitions on their own (circumvent our
   `bootstrap.cfg` file).
* boot-services-with-config: allows caller to handle cli parsing,
   config parsing, *and* loading of ServiceDefinitions on their own
   (circumvent our `bootstrap.cfg` and ini parsing).
* build-app: similar to boot-services-with-config, but doesn't
   actually boot the services.  Caller can then manage app lifecycle
   on their own.