Truncate breadcrumbs on the server

Commit 777b778576 made the individual breadcrumbs truncate if they were
wider than 200 pixels. The css needed for that to work made the default
breadcrumb styling from Bootstrap look odd. There was an added
bottom-margin that made it look sub-par.

Now that we have abstracted breadcrumbs into its own partial, we can
make use of the `truncate` Rails helper method instead. I'm now cutting
the text at 50 characters, and there'll be a `title` attribute helping
you see the whole text if you hover.

This commit reverts the above-mentioned 777b778576.
Introduce stacked progress bar for sweeps

To be able to quickly see the status for a sweep, I'm introducing a
progress bar that displays the progress. The progress bar is stacked in
the following order:

1. Under review
2. Accepted
3. Rejected

I choose to keep the old `sweep_status` method and use it to display
a readable status format when you hover over a progress bar.

The progress bar is displayed in the following places:

- On the project page, under "Last sweep"
- On the sweeps#index page, in the table
- On the sweeps#show page
Simplify sweeps#show page

Now that we have a progress bar to display the status for a sweep, we
don't really need to split snapshots into groups on the sweeps#show
page. This commit simplifies rendering by putting all snapshots in one
panel.

This breaks a previous feature. Before, only snapshots in the "Under
review" pane would take you to the snapshots#show page in the context of
reviewing a list of snapshots. After this commit, all snapshots will
take you to the snapshots#show page in a review context. Also, all
snapshots in the sweep will be part of the review list. We believe this
to be a better experience as it is less state-dependent. Independent of
what state individual snapshots are in, the review order and size will
remain.

This change is also in preparation for adding some real-time updating
features to the page. I'm about to make snapshot cards and sweep
progress bars auto-update, and I don't want content to have to shift
around between different containers (which would have been the case
before this change).
Auto-refresh snapshot cards every 5 seconds

This commits adds a 5 second polling component to automatically refresh
snapshot cards. The basic setup:

- The browser will poll/refresh every five seconds, passing ids for
  all snapshot cards that can be found on the page.
- The server will lookup snapshots by ids and render a new snapshot
  card. The new card is sent back in a json array.
- The browser parses this json and replaces cards with new ones.

"What about web sockets?"

I'm fully aware that this type of problem could be solved by using
websockets. I've built similar components before [1] and even though it
might seem nice at the surface, websockets introduce complexities that
I'd much rather be without at this time. First of all, the server needs
to keep track of clients. Then, to avoid pushing out every single change
to everyone, we would need to keep track of what the clients are
currently showing on the screen and only push out relevant push messages
to those who need them.

With client-side polling, the interface is simple: The client constructs
a request with the elements it wants to refresh. The server responds
with new versions of those elements. No state needs to be kept on the
server.

This component is set up to be able to handle multiple types (snapshots,
sweeps) at the same time in one request. Right now we only do snapshots,
but sweep progress bars are coming up.

To avoid re-rendering all cards every time we poll, I chose to pass
through an `ifModifiedSince` timestamp. This timestamp is set globally
on page load, and updated each time we poll. Only snapshots changed
after this timestamp will be re-rendered.

[1]
https://github.com/trotzig/Burrito/blob/8eba6e60f67b6bd059df1a6982049feafcf0f0f9/src/main/resources/burrito/public/burrito-feeds.js
Only refresh if there are elements to update

Before, we would always send the refresh request to the server, even if
there were no elements on the page that could be updated. After this
change, we no longer poll if we already know that there is nothing to
update.
Auto-refresh sweep progress bars

Now that we have a general refresh-pattern for components, I've added
sweep progress bars to the list of items that are automatically
refreshed.

I generalized the controller code a bit to detach the different types
(snapshots, sweeps) from the action itself. This was needed in order to
keep the code DRY, and as an added benefit it should now be easier to
add other elements to refresh.

Specs are at this point mostly smoke tests. We might want to test the
actual html output from the refresh. But for now I've left that out of
scope.
Make snapshot cards have fixed width

Now that we are auto-refreshing snapshot cards, we don't want them to
move around on the screen. Before, cards could be anything from 100
to 120 pixels. After this change, they are always 110 pixels.

I also changed the text color of the timestamp and the diff percentage,
plus I rounded the percentage down to the closes two decimal value.