Refactor: Change Length Calculator from Module to Class

We wanted Length Calculator to be an object rather than a module that we just
keep adding methods to, in order to decouple it from the progress bar itself.

We made that basic change, and then we changed all the references to an instance
variable for the new class we made in order to make all the tests pass.

The changes in the tests are just hacks in order to get them to pass. We will
need to go back later and fix it in a more elegant way.

--------------------------------------------------------------------------------
Branch:        refactor/massive-update
Signed-off-by: Jeff Felchner <accounts+git@thekompanee.com>
Refactor: Inline the Formatter module into Base

This allows us to look at the Base class as a whole and not 'hide' functionality
which was previously in the formatter.

--------------------------------------------------------------------------------
Branch:        refactor/massive-update
Signed-off-by: Jeff Felchner <accounts+git@thekompanee.com>
Refactor: Extract Timer out into its own class

There will now be one 'master' timer for the entire bar and that timer will be
passed into the different components which require it.

Unlike previously, the components will not be responsible for updating the
timer, but will instead merely reference it.

This will eliminate the need for cycling through all of the components simply to
send them the same message.

--------------------------------------------------------------------------------
Branch:        refactor/massive-update
Signed-off-by: Jeff Felchner <accounts+git@thekompanee.com>
Refactor: Change Progressable from a module into a class

For similar reasons as to why we changed `Timer` into a class, there's only need
to have one object tracking the progress of the bar.

Instead of mixing in the functionality for tracking progress into multiple
components, instead those components will be passed the `Progressable` and ask
it for information.

Also, similarly to the `Timer`, we removed all code which had the components
manipulating the progress and instead all progress manipulation happens in the
`Base`.

--------------------------------------------------------------------------------
Branch:        refactor/massive-update
Signed-off-by: Jeff Felchner <accounts+git@thekompanee.com>
Refactor: Remove 'with_timers' and 'with_progressables'

Because there's only one of each of these to update now, we can simplify by
removing these methods.

--------------------------------------------------------------------------------
Branch:        refactor/massive-update
Signed-off-by: Jeff Felchner <accounts+git@thekompanee.com>
Docs: Remove useless comments

--------------------------------------------------------------------------------
Branch:        refactor/massive-update
Signed-off-by: Jeff Felchner <accounts+git@thekompanee.com>
Refactor: Remove and rename 'Timer', 'Progressable' and 'Throttle'

These are no longer components of the bar but rather standalone classes which
each of the components uses.

--------------------------------------------------------------------------------
Branch:        refactor/massive-update
Signed-off-by: Jeff Felchner <accounts+git@thekompanee.com>
Refactor: Move rate formatting methods into the rate component

This is the beginning of a set of commits which will move formatting methods
from the `Base` into the respective component classes.

--------------------------------------------------------------------------------
Branch:        refactor/massive-update
Signed-off-by: Jeff Felchner <accounts+git@thekompanee.com>
Refactor: Remove ElapsedTimer component

Now that the `Timer` is extracted into its own class, the `ElapsedTime`
component was extremely thin.  Looking at it, and how we were using it as well
as the `EstimatedTime` component, made it obvious that the two should be
combined.

This is the first step.  The next couple commits will involve renaming.

--------------------------------------------------------------------------------
Branch:        refactor/massive-update
Signed-off-by: Jeff Felchner <accounts+git@thekompanee.com>
Refactor: Rename the 'EstimatedTimer' component to 'Time'

This better reflects what it actually is now that we've combined it with the
`ElapsedTimer` component.

--------------------------------------------------------------------------------
Branch:        refactor/massive-update
Signed-off-by: Jeff Felchner <accounts+git@thekompanee.com>
Refactor: Rename 'Time#to_s' to '#estimated_with_label'

Now that the Timer components are combined, this needs to be more explicit about
what it is.

--------------------------------------------------------------------------------
Branch:        refactor/massive-update
Signed-off-by: Jeff Felchner <accounts+git@thekompanee.com>
Refactor: Rename 'Time#elapsed_time_to_s' to '#elapsed_with_label'

Making this consistent with `estimated_with_label`

--------------------------------------------------------------------------------
Branch:        refactor/massive-update
Signed-off-by: Jeff Felchner <accounts+git@thekompanee.com>
Refactor: Rename 'Time#estimated_time' to '#estimated'

Having 'time' on the end was redundant.

--------------------------------------------------------------------------------
Branch:        refactor/massive-update
Signed-off-by: Jeff Felchner <accounts+git@thekompanee.com>
Refactor: Remove unused 'Timer#elapsed_time' method
Refactor: Rename 'Time#elapsed_time' to '#elapsed'

--------------------------------------------------------------------------------
Branch:        refactor/massive-update
Signed-off-by: Jeff Felchner <accounts+git@thekompanee.com>
Refactor: Move formatted time methods into the 'Time' component

Part of our ongoing series :)

--------------------------------------------------------------------------------
Branch:        refactor/massive-update
Signed-off-by: Jeff Felchner <accounts+git@thekompanee.com>
Refactor: Rename 'estimated_time' to 'estimated_with_elapsed_fallback'

--------------------------------------------------------------------------------
Branch:        refactor/massive-update
Signed-off-by: Jeff Felchner <accounts+git@thekompanee.com>
Refactor: Make 'Time#estimated_with_elapsed_fallback' private
Refactor: Make 'Time#estimated' and 'Time#elapsed' private

The diff on this looks awful, but all we really did was move the 'private'
keyword.

--------------------------------------------------------------------------------
Branch:        refactor/massive-update
Signed-off-by: Jeff Felchner <accounts+git@thekompanee.com>
Style: Make whitespace changes