Fill in the vUSB interrupt too so the bootloader does not have to.

This is now possible because we now know the address of the ISR in
advance.
Fill alignment in .vectors with 0xFF

Avoids unnecessary programming of bits in the vector table.
Bring back USB disconnect in the upgrade firmware.

The previous code simply pulled down all the pins of port B for a while, then
released them again. The intention was probably to prevent USB bus
re-enumerations while upgrading the bootloader.

This would cause troubles when the device is still in its circuit and the pins
must not be manipulated. (in my case, some of the pins are used for I²C,
pulling down the pins will cause bus interruptions in this case).

The previous code also let the D- pin float after a while, which then caused a
bus re-enumeration before we entered the bootloader again.

This change
a) pulls down the D- pin only
b) does _not_ reset the pin configuration when leaving for the botloader.

The latter is so to prevent the host from enumerate the USB bus until the
bootloader is ready again.

D+ is left unchanged, it should be pulled down by the USB host anyways.
Fix double destroy of the usb device object.
Giver a reason why erasing the application failed.
Use -mbranch-cost=5

This does not help the '85 targets, but reduces the size for the '861
and '167 targets by a few bytes.

NB: other optimizations I tried:

-mstrict-X, -maccumulate-args, -mtiny-stack, -mrelax, -morder2

no change.

-morder1

Size increase +14 ('85,'861), +24 ('167)

-mbranch-cost= (default 0)

1   : no change
2   : size +8 for '85, +2 for '861, +2 for '167
3,4 : size +4 for '85, -2 for '861, -2 for '167
5+  : size +0 for '85, -4 for '861, -6 for '167