BUG: Fix repr for cumulative risk metrics.

The __repr__ for RiskMetricsCumulative was referring to an older
structure of the class, causing an exception when printed.

Convert to printing the last values in the metrics DataFrame.
BLD: Update TA-Lib to latest version.

Keeping current with TA-Lib release.
Also, TA-Lib 0.4.7 has been removed from PyPI, so 0.4.8
is required for fresh PyPI based installs.
MAINT: Allow sim_params to provide data frequency for the algorithm.

In the case that data_frequency of the algorithm is None,
allow the sim_params to provide the data_frequency.

For less redundancy when setting up an algorithm.
MAINT: Always defer to the algorithms data frequency.

For compatibility with existing behavior of having the,
data_frequency of the algorithm override the simulation parameters.

We may want to consider throwing an exception if the two do not match.
BUG: Prevent minute emission from crashing at end of available data.

The next day calculation was causing an error when a minute
emission algorithm reached the end of available data.

Instead of a generic exception when available data is reached,
raise and catch a named exception so that the tradesimulation loop
can skip over, since the next market close is not needed at the end.
ENH: Limit handle_data to times with market data.

To prevent cases where custom data types had unaligned timestamps,
only call handle_data when market data passes through.

Custom data that comes before market data will still update
the data bar. But the handling of that data will only be done
when there is actionable market data.