echo: handle -- correctly
echo: fix handling of \0
echo: pass Busybox test suite
Merge pull request #280 from Arcterus/echo-fix

Make echo pass the Busybox test suite
cleaner prefix handling ; cleanup ; prep for K-P

indent_str and pfxind_str are combined along with
prefix_str when Paragraph is created, getting rid
of a couple string allocations at the cost of
slightly more memory use.

displayed_length is used to calculated prefix_len
in fmt.rs now

handle linebreaking in a nicer way inside of
linebreak.rs; inner loop now immediately kicks
Paragraph into break_lines, which will eventually
dispatch either to K-P or break_simple function

Help function no longer uses linebreak; no sense
in doing this since we know where to break it
statically

use ::util::libc in silent_unwrap macro and remove
extern crate libc

create data structure for K-P implementation
fixed tab behavior in -u

In uniform mode, replace '\t' after the indent with "  " (two spaces)
to force sentence breaks (double spacing) at tabs on the output.

Need to decide how to handle tab stops in non-uniform mode. Best way
seems to be to figure out tabulator alignment after placing the word
to determine the line's length, assuming TABWIDTH. That's different
than GNU fmt, which expands tabs *before* line breaking, which isn't
quite right, I think: after breaking, the number of spaces to the
tabstop might be different than it was before breaking. Hmmmm.
lines blank save for prefix act as par separators
tidy up the breaking by passing arg struct pointer
better \t in uniform mode ; signal sentence end

Sentence endings will be important in K-P because
we want to do some discouraging and encouraging of
linebreaks based on them.

In uniform mode, instead of rewriting tabs, we detect
them and indicate sentence end, which causes two spaces
to be emitted.

Did some performance comparisons and we're hanging at
~20% slower than GNU fmt. However, GNU fmt chokes
*big time* on huge input files when in -c or -t mode,
whereas we are slowest in -u mode.

TODO: benchmark against OpenBSD and NetBSD fmt