From New Oxford American Dictionary:
Attack is the most general verb, meaning to set upon someone or something in a violent, forceful, or aggressive way (: the rebels attacked at dawn); but it can also be used figuratively (: attack the government's policy).
Assault implies a greater degree of violence or viciousness and the infliction of more damage. As part of the legal term “assault and battery,” it suggests an attempt or threat to injure someone physically.
To assail is to attack with repeated thrusts or blows, implying that victory depends not so much on force as on persistence.
I cannot back up the following comments via official sources, but they are observations/opinions from an American's viewpoint.
I find assail and the military sense of harry to be nearly identical, with the only difference being a sense of greater violence associated with assail.
(from New Oxford American Dict.)
verb ( -ries, -ried) [ trans. ]
persistently carry out attacks on (an enemy or an enemy's territory).
• persistently harass : he bought the house for Jenny, whom he harries into marriage | [as adj. ] ( harried) harried reporters are frequently forced to invent what they cannot find out.
ORIGIN Old English herian, hergian, of Germanic origin, probably influenced by Old French harier, in the same sense.
Both attack and assault have many uses. Both are probably interchangeable here: attack/assault a person and attack/assault a military position (although assault, in this context, seems to me to have the implication of requiring the involvement of infantry forces, while attack does not have any such implication). The infantry force implication for assault doesn't always exist, though.
However, one can say "the lion attacked the antelope", while using assault in that sense sounds completely inappropriate to my ears. Similarly, "Bush attacked Iraq" is OK, but using assault sounds awkward (at least if one restricts the meaning to the military one). Also, "our fleet attacked the enemy" is OK, but assaulted doesn't sound right. In none of these three cases would assail seem to be a usable substitute term.
Conversely, I can't immediately think of an example where one would use assault without being able to directly substitute attack without any problems. (Of course, I am totally ignoring the law, where legalistic nuances might apply.)