Disable noWait when deleting queues/exchanges

The use of noWait when deleting queues and exchanges in tests means that we
don't catch any errors (they go to the notifyClose channel which is handled
within QueueConnection) and that their presence can affect the behaviours of
tests in other describe blocks.

This now causes the tests to fail when deleting the exchanges. Which we'll
need to fix before merging this commit:

    Expected
        <*amqp.Error | 0xc2101734e0>: {
            Code: 503,
            Reason: "COMMAND_INVALID - unimplemented method",
            Server: true,
            Recover: false,
        }
    to be nil
Use publisher/producer to delete test exchanges

This fixes the `COMMAND_INVALID - unimplemented method` test failures
introduced by disabling noWait in the previous commit.

They are caused by RabbitMQ refusing to allow an exchange to be deleted if a
channel is still Consume()ing from it. Ideally we'd Cancel() it, but doing
so requires the ConsumerTag which we've allowing the client library to
auto-generate for us - we only have access to it in delivered messages, of
which we might not have any.

So the simplest solution is to use the publisher/producer channel to delete
the exchange. I've added a comment here, because it wouldn't be immediately
obvious why.
Delete compiled self from third_party/pkg

Delete the compiled artifacts of our own package from third_party/pkg when
setting up dependencies. This will resolve errors we've seen when switching
between branches that have changed function signatures and an old compiled
copy of the function has been used.
Merge pull request #16 from alphagov/makefile_rm_compiled_self

Delete compiled self from third_party/pkg
Merge pull request #15 from alphagov/amqp_test_delete_state

Ensure that test queues/exchanges are deleted
Move test assertions out of range(chan)

This pattern of calling range on a channel and asserting that one item
matches our test assertions will fail to raise an error if the queue is
empty.

So instead change these to read a single item from the channel, which will
block if the channel is empty, and then make the assertion. I've added a
done channel so that Ginkgo fails the test if we block for longer than the
default of 1s:

http://onsi.github.io/ginkgo/#asynchronous-tests
Merge pull request #17 from alphagov/move_asserts_out_of_chan_loops

Move test assertions out of range(chan)
Move PurgeAllKeys func into helpers test file for reuse

We're going to be purging all keys from Redis whenever we build up or
use a Redis service (like ttl_hash_set objects). Share this code for
easier reuse in `AfterEach` blocks.
[#73135254] HealthCheck function returns the status of Redis and RabbitMQ

This is wrapped up by a Status object so that we can pretty-print the
keys into JSON for use by an HTTP HandlerFunc later.
[#73135254] HealthCheck is an object that can return an HTTP Handler

To build out our HTTP health check endpoint we're going to convert our
simple function into an object with multiple methods attached. These
methods return the Status() and an HTTPHandler(). The latter can be
used as part of Go's HTTP server and attached using
http.HandlerFunc().

This is wired into the main function and the port can be configured
using environment variables.