Some special casing in BitVector.compact to boost performance

Common cases in `compact` (used heavily by `toByteVector`) are a single flat `Bytes` constructor and a single `Drop` constructor. Both are special-cased to avoid going through the general purpose `reduceBalanced` path. On `Performance.scala` in scodec am seeing about a 30-40% speed improvement just due to this change.