ENH: Stream benchmark and treasury data when downloading

Instead of loading entire csv or xml into memory.
BUG: Fix treasury loading.

Make adjustments for using Python built-in ElementTree instead of lxml
based lxml.

lxml was edited out during pulling in of memory friendly loading of
treasury curves, however some of the use of ETree was lxml specific.

Mea culpa.
STY: Add space after comma in order docstring.
STY: Tweak whitespace in comment.
BUG: Fix grouping of events streamed through blotter.

To fix the grouping of events so that (dt, events) ordering
is preserved, the tracking of order states needs to change
in the following way.

Change how order keeps track of dates:
- Change order's dt field to reflect modified date.
- Add a created field.

Change how performance keeps track of orders by:
- Map dt to transactions
- Map dt to orders
- Map order ids to keep track of updated orders.
MAINT: Generate perfomance message only once per bar for minute mode.

Instead of creating a set of perf messages for each event during minute
emission mode, only include the messages on the last event in the bar.

Should cut down on calculations/serialization as well, as work towards
doing more 'end of bar' logic for minute benchmarks.
BUG: Use last trading day for last successful date message.

market_open member does not exist on TradingEnvironment.
MAINT: Remove unused last_dt member from risk.RiskMetricsIterative
TST: Explicitly define the data frequency of record incr test.
TST: Ensure that test bars and events use midnight for daily data.

Daily data should be using midnight as the timestamp,
ensure that test data created by data_gen use midnight, so that
upcoming implementations that rely on the timestamp will be compatible.
BUG: Fix examples with regards to simulation parameters.

Fix bug where algorithms that lack sim_params do not pass the source
derived created sim_params through the generator creation logic.
TST: Ensure that create_trade_history uses midnight for daily trades.

Prepare for implementation of backtest loop that depends on daily
trades being grouped by midnight.
MAINT: Use a fake progress value for minute performance.

Eventually should to either return None or remove
progress completely, but in the meantime, return a
constant of 1.0 for progress of minute emissions.

Also, factor out the daily calculation into a property
instead of calculating during process.
MAINT: Use sim_params for risk metrics init.

Prepare for adding emission_rate in risk metrics logic.
TST: Prevent dividend test from using non-trading day.

Use the next events' datetime for the transaction instead of
incrementing by a calendar day.
TST: Factor out the running events through a test performance tracker.

Based on @fawce's work for changing the simulate loop.
MAINT: Improve message for return mismatch by including current dt.

Based on work from @fawce's simulation loop work.
ENH: Add basis for minute rate emission of performance.

- Create different benchmark containers in performance
  depending on emission rate.
- Add a minute close method which updates algorithm and
  benchmark returns, and calculates the risk metrics
  depending on those methods.
- Provide fake 0.0 values for annualized metrics like
  sharpe, sortino, and information, until we figure out
  how they should be treated in the context of minutely
  calculation.

*NOTE* This does not fully work without the changes to the
simulation loop by @fawce
ENH: Change simulation loop to use benchmarks as simulation 'clock'.

Refactor PerformanceTracker, Blotter, and AlgorithmSimulator to
work with handling the end of a bar at the AlgorithmSimulator level
instead of within PerformanceTracker.

- PerforamnceTracker and Blotter are longer generators,
  both provide functions to process events instead.
- AlgorithmSimulator calls each from within the loop running
  over the data generator.
- Change test_perf_tracker utility to be compatible with change
  away from PerformanceTracker as a generator.

Has the effect of:
- Fixing the timing of order emission.
- Allow minutely emission of benchmarks, which was prevented
  by the extra grouping previously caused by Blotter.

Minutely emission also depends on work for streaming benchmarks
through performance and risk at a minute granularity.
ENH: Emit minute benchmarks, refactor event loop, fix order timing.

Note, in a somewhat Catch-22 situation, the refactoring of
the simulation loop and streaming of minutely benchmarks enable
each other, since the benchmarks fall over because of doubled
date groupings, which is fixed by the change of the simulation loop,
but the simulation loop depends on using the benchmarks as a clock,
so pull the two changes in together, though the two changes do not
work independently of each other.