Changed treatment of RecommendationDAO

Now RecommendationDAO is treated in fetcher as all the other DAOs.
Add 'merge' functionality to DAOs
Change fetcher behaviour in face of unknown error

Now fetcher retries with constant intervals between subsequent
attempts, just like in case of network-related errors.
Extracted DAOs to separate package
Restructure Mains
Fix for Sleeper

Sleeper did not set mult in the ctor, and hence it remained 0. After
first sleep, multiplication by mult caused delay to become 0, and so
subsequent sleeps had duration 0.
Split fetcher into smaller classes

FetchRecommendedImpl was holding too many responsibilities. Reusable
parts were extracted to SessionManager and AbstractProcessor (basically
template method class for processing stream of records from the
database).
Add delay getter to Sleeper
Add proper handling of last batch to fetcher

Fetcher was not emptying the fetch queue after the iterations, and so
the last few tweets were ignored. It works correctly after this change.
Add some more logging to AbstractProcessor
Add base class for users' tweet fetchers

We need to fetch recent tweets of

- authors of #FF tweets
- users recommended in these #FF tweets

Both cases follow the same scheme:

- Select users according to some role-based criterion
- Iterate through these users
  - Fetch recent tweets
  - Process them (set type, level)
  - Mark user as 'handled'

This basic scheme is implemented by BasicTweetFetcher, using Template
Method pattern.
Add tweet fetcher for #FF tweet authors
Extract limit rate functions to separate class
Bump version of twitter4j
Add multiple twitter sessions support

Multiple Twitter connections can be now utilized to partially bypass
rate limits. TwitterProvider creates list of all available connections,
and TwitterManager chooses appropriate connection for specified type of
call, based on remaining calls and time to reset. Moreover,
TwitterManager allows to wait for available resources. Delay is
computed using information returned by rate limit status calls.
Refactor worker classes for TwitterManager

Now classes that fetch a lot of data are using TwitterManager and the
multiconnection capabilities it provides.
Unify fetcher application launchers

Using Spring Profiles, one launcher is used for both fetcher
applications, by binding two TweetFetcher implementations to one of two
profiles: 'FF' and 'recommended'.
Refactoring and renaming

Generally, big unification. Utilizing Spring Profiles, we can get rid
of task-specific interfaces. Job interface replaces TweetFetcher,
TweetFetcherApp becomes general JobRunner. Many other minor changes
have been made as well.
Add "can't get tweets" field to User

It turns out that 401 code while trying to fetch recent tweets of
certain users is usually due to the profile being protected. It makes
little sense to retry in such cases, and to prevent multiple requests
wasted for it for every application launch, special field to denote
this state is added.
Add field 'problems fetching retweets' to Tweet

For some tweets obtaining list of retweets is not possible, most likely
usually due to tweet begin authored by user with private profile. In
this case, to prevent attempts each time the program is run, it seems
worthwhile to store this information.